ITPub博客

首页 > 应用开发 > IT综合 > 企业级AI应用开发实践:基于LangChain与LLM的智能系统构建

企业级AI应用开发实践:基于LangChain与LLM的智能系统构建

IT综合 作者:bhluo 时间:2026-02-11 14:13:53 0 删除 编辑

# 企业级AI应用开发实践:基于LangChain与LLM的智能系统构建


在大型语言模型技术快速发展的背景下,企业如何有效利用这一技术构建实用的AI应用成为关键挑战。LangChain作为一个开源框架,为基于大型语言模型的应用开发提供了系统化解决方案,特别是在智能代理和检索增强生成(RAG)系统方面展现出重要价值。


## LangChain核心架构设计


LangChain采用模块化设计,将复杂的AI应用拆分为多个可组合的组件,支持从简单问答到复杂工作流的各种场景。


```python

from langchain.chains import LLMChain, SequentialChain

from langchain.prompts import PromptTemplate

from langchain.llms import OpenAI

from langchain.memory import ConversationBufferMemory


class LangChainBaseSystem:

    def __init__(self, api_key: str):

        """初始化LangChain基础系统"""

        self.llm = OpenAI(

            temperature=0.7,

            openai_api_key=api_key,

            model_name="gpt-4"

        )

        self.memory = ConversationBufferMemory(

            memory_key="chat_history",

            return_messages=True

        )

    

    def create_chain(self, template: str, output_key: str):

        """创建基础处理链"""

        prompt = PromptTemplate(

            input_variables=["query"],

            template=template

        )

        

        return LLMChain(

            llm=self.llm,

            prompt=prompt,

            output_key=output_key,

            memory=self.memory

        )

    

    def create_sequential_workflow(self):

        """创建顺序工作流"""

        # 信息提取链

        extraction_template = """

        分析以下用户问题,提取关键信息:

        用户问题:{query}

        

        请提取:

        1. 主要意图

        2. 关键实体

        3. 具体要求

        

        结构化输出:

        """

        

        extraction_chain = self.create_chain(

            extraction_template,

            "extracted_info"

        )

        

        # 响应生成链

        response_template = """

        基于以下信息生成专业回答:

        提取的信息:{extracted_info}

        历史对话:{chat_history}

        

        生成回答:

        """

        

        response_chain = self.create_chain(

            response_template,

            "final_response"

        )

        

        # 组合顺序链

        overall_chain = SequentialChain(

            chains=[extraction_chain, response_chain],

            input_variables=["query"],

            output_variables=["final_response"],

            verbose=True

        )

        

        return overall_chain

```


## 检索增强生成(RAG)系统实现


RAG系统通过结合外部知识库检索和LLM生成能力,显著提升回答的准确性和时效性。


```python

from langchain.vectorstores import Chroma

from langchain.embeddings import OpenAIEmbeddings

from langchain.text_splitter import RecursiveCharacterTextSplitter

from langchain.document_loaders import DirectoryLoader, PDFLoader

import hashlib


class RAGSystem:

    def __init__(self, embedding_model: str = "text-embedding-ada-002"):

        """初始化RAG系统"""

        self.embeddings = OpenAIEmbeddings(

            model=embedding_model

        )

        self.text_splitter = RecursiveCharacterTextSplitter(

            chunk_size=1000,

            chunk_overlap=200,

            length_function=len,

            separators=["\n\n", "\n", " ", ""]

        )

        self.vector_store = None

    

    def build_knowledge_base(self, data_path: str):

        """构建知识库"""

        # 加载文档

        loader = DirectoryLoader(

            data_path,

            glob="**/*.pdf",

            loader_cls=PDFLoader

        )

        

        documents = loader.load()

        

        # 文档处理

        processed_docs = []

        for doc in documents:

            # 文档分块

            chunks = self.text_splitter.split_documents([doc])

            

            # 添加元数据

            for chunk in chunks:

                chunk.metadata.update({

                    "doc_id": hashlib.md5(doc.metadata["source"].encode()).hexdigest(),

                    "chunk_index": chunks.index(chunk),

                    "total_chunks": len(chunks)

                })

            

            processed_docs.extend(chunks)

        

        # 创建向量存储

        self.vector_store = Chroma.from_documents(

            documents=processed_docs,

            embedding=self.embeddings,

            persist_directory="./chroma_db"

        )

        

        return len(processed_docs)

    

    def retrieve_relevant_docs(self, query: str, k: int = 5):

        """检索相关文档"""

        if not self.vector_store:

            raise ValueError("知识库未初始化")

        

        # 相似性检索

        docs = self.vector_store.similarity_search_with_relevance_scores(

            query, 

            k=k

        )

        

        # 重排序(可选)

        reranked_docs = self._rerank_documents(query, docs)

        

        return reranked_docs

    

    def _rerank_documents(self, query: str, docs: list):

        """文档重排序"""

        # 可以使用专门的reranking模型

        # 这里实现基于分数和长度的简单重排序

        reranked = sorted(

            docs,

            key=lambda x: (x[1], len(x[0].page_content)),

            reverse=True

        )

        

        return reranked

    

    def generate_answer(self, query: str, context: list):

        """基于检索结果生成回答"""

        # 构建上下文

        context_text = "\n\n".join([

            f"文档 {i+1}:\n{doc.page_content}"

            for i, (doc, score) in enumerate(context)

        ])

        <"wfe.j9k5.org.cn"><"sad.j9k5.org.cn"><"wqa.j9k5.org.cn">

        # 构建提示词

        prompt = f"""基于以下上下文信息回答问题。

        

        上下文:

        {context_text}

        

        问题:{query}

        

        要求:

        1. 基于上下文信息回答

        2. 如果上下文没有相关信息,请说明

        3. 引用相关文档来源

        

        回答:"""

        

        # 调用LLM生成回答

        from langchain.chat_models import ChatOpenAI

        

        llm = ChatOpenAI(

            temperature=0.3,

            model_name="gpt-4"

        )

        

        response = llm.predict(prompt)

        

        return response, context

```


## 智能代理系统架构


智能代理能够自主完成任务,通过工具调用和环境交互实现复杂功能。


```python

from langchain.agents import initialize_agent, Tool

from langchain.agents import AgentType

from typing import List, Dict, Any


class IntelligentAgentSystem:

    def __init__(self, tools: List[Tool]):

        """初始化智能代理系统"""

        self.tools = tools

        self.agent_executor = None

        

    def create_agent(self, llm, agent_type: str = AgentType.ZERO_SHOT_REACT_DESCRIPTION):

        """创建代理"""

        self.agent_executor = initialize_agent(

            tools=self.tools,

            llm=llm,

            agent=agent_type,

            verbose=True,

            handle_parsing_errors=True,

            max_iterations=10,

            early_stopping_method="generate"

        )

        

        return self.agent_executor

    

    def execute_task(self, task_description: str):

        """执行任务"""

        if not self.agent_executor:

            raise ValueError("代理未初始化")

        

        result = self.agent_executor.run(task_description)

        return result


# 工具定义示例

def create_tools():

    """创建代理可用工具集"""

    

    def search_knowledge_base(query: str) -> str:

        """知识库搜索工具"""

        # 实际实现知识库搜索逻辑

        return f"搜索结果:{query}"

    

    def calculate_data(data: str) -> str:

        """数据处理工具"""

        # 实际实现计算逻辑

        return f"计算结果:{data}"

    

    def api_call(endpoint: str, params: Dict[str, Any]) -> str:

        """API调用工具"""

        # 实际实现API调用

        return f"API响应:{endpoint}"

    

    # 定义工具列表

    tools = [

        Tool(

            name="知识库搜索",

            func=search_knowledge_base,

            description="用于搜索企业知识库中的相关信息"

        ),

        Tool(

            name="数据分析",

            func=calculate_data,

            description="用于执行数据计算和分析任务"

        ),

        Tool(

            name="API调用",

            func=api_call,

            description="用于调用外部API服务"

        )

    ]

    

    return tools

```


## 企业级RAG系统部署架构


```yaml

# docker-compose.yaml - RAG系统部署配置

version: '3.8'


services:

  vector-database:

    image: chromadb/chroma

    ports:

      - "8000:8000"

    environment:

      - IS_PERSISTENT=TRUE

      - PERSIST_DIRECTORY=/chroma/chroma

    volumes:

      - ./chroma_data:/chroma/chroma

  

  embedding-service:

    build: ./embedding_service

    ports:

      - "8080:8080"

    environment:

      - OPENAI_API_KEY=${OPENAI_API_KEY}

      - EMBEDDING_MODEL=text-embedding-ada-002

  

  retrieval-service:

    build: ./retrieval_service

    ports:

      - "8081:8081"

    environment:

      - VECTOR_DB_HOST=vector-database

      - EMBEDDING_SERVICE_HOST=embedding-service

  

  llm-gateway:

    build: ./llm_gateway

    ports:

      - "8082:8082"

    environment:

      - OPENAI_API_KEY=${OPENAI_API_KEY}

      - RETRIEVAL_SERVICE_HOST=retrieval-service

  

  api-gateway:

    image: nginx:alpine

    ports:

      - "80:80"

    volumes:

      - ./nginx.conf:/etc/nginx/nginx.conf

    depends_on:

      - retrieval-service

      - llm-gateway

```


## 监控与评估系统


```python

from datetime import datetime

import pandas as pd

from typing import Dict, List, Any

import json


class RAGEvaluationSystem:

    def __init__(self):

        """初始化评估系统"""

        self.evaluation_data = []

    

    def evaluate_response(

        self,

        query: str,

        response: str,

        context: List[Any],

        metrics: Dict[str, float]

    ):

        """评估回答质量"""

        evaluation = {

            "timestamp": datetime.now().isoformat(),

            "query": query,

            "response": response,

            "context_count": len(context),

            "metrics": metrics,

            "relevance_score": self._calculate_relevance(query, response),

            "accuracy_score": self._calculate_accuracy(response, context),

            "hallucination_score": self._check_hallucination(response, context)

        }

        

        self.evaluation_data.append(evaluation)

        return evaluation

    

    def _calculate_relevance(self, query: str, response: str) -> float:

        """计算相关性分数"""

        # 实现相关性评估逻辑

        return 0.85

    

    def _calculate_accuracy(self, response: str, context: List[Any]) -> float:

        """计算准确性分数"""

        # 实现准确性评估逻辑

        return 0.90

    

    def _check_hallucination(self, response: str, context: List[Any]) -> float:

        """检查幻觉程度"""

        # 实现幻觉检测逻辑

        return 0.10

    

    def generate_report(self) -> Dict[str, Any]:

        """生成评估报告"""

        if not self.evaluation_data:

            return {}

        

        df = pd.DataFrame(self.evaluation_data)

        

        report = {

            "summary": {

                "total_queries": len(df),

                "avg_relevance": df["relevance_score"].mean(),

                "avg_accuracy": df["accuracy_score"].mean(),

                "avg_hallucination": df["hallucination_score"].mean()

            },

            "trends": {

                "relevance_trend": self._calculate_trend(df, "relevance_score"),

                "accuracy_trend": self._calculate_trend(df, "accuracy_score")

            },

            "recommendations": self._generate_recommendations(df)

        }

        

        return report

    

    def save_evaluation_data(self, filepath: str):

        """保存评估数据"""

        with open(filepath, 'w') as f:

            json.dump(self.evaluation_data, f, indent=2)

```


## 安全与权限控制


```python

from functools import wraps

from typing import Callable, Any

import jwt

from datetime import datetime, timedelta


class SecurityManager:

    def __init__(self, secret_key: str):

        """初始化安全管理器"""

        self.secret_key = secret_key

        self.user_roles = {}  # 实际应从数据库加载

    

    def authenticate_token(self, token: str) -> Dict[str, Any]:

        """验证访问令牌"""

        try:

            payload = jwt.decode(

                token,

                self.secret_key,

                algorithms=["HS256"]

            )

            return payload

        except jwt.ExpiredSignatureError:

            raise ValueError("令牌已过期")

        except jwt.InvalidTokenError:

            raise ValueError("无效令牌")

    

    def check_permission(self, user_id: str, resource: str, action: str) -> bool:

        """检查用户权限"""

        user_roles = self.user_roles.get(user_id, [])

        

        # 权限检查逻辑

        required_permission = f"{resource}:{action}"

        

        # 实际应从数据库查询权限

        allowed_permissions = self._get_user_permissions(user_roles)

        

        return required_permission in allowed_permissions

    

    def rate_limit_decorator(self, limit: int, period: int):

        """限流装饰器"""

        def decorator(func: Callable):

            request_count = {}

            

            @wraps(func)

            def wrapper(*args, **kwargs):

                user_id = kwargs.get('user_id') or args[0]

                current_time = datetime.now()

                

                if user_id not in request_count:

                    request_count[user_id] = []

                

                # 清理过期记录

                request_count[user_id] = [

                    t for t in request_count[user_id]

                    if current_time - t < timedelta(seconds=period)

                ]

                

                if len(request_count[user_id]) >= limit:

                    raise Exception("请求频率超限")

                

                request_count[user_id].append(current_time)

                return func(*args, **kwargs)

            

            return wrapper

        return decorator

```


基于LangChain与大型语言模型的企业级AI应用开发,为企业构建智能系统提供了完整的解决方案。通过模块化设计、RAG架构和智能代理机制,能够显著提升AI应用的准确性和实用性。在实践中,企业应注重系统架构的可扩展性、安全性和可维护性,结合业务需求进行定制化开发,确保AI技术能够真正服务于业务目标,创造实际价值。随着技术的不断发展,持续优化和迭代将成为保持系统竞争力的关键。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3110455/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-01

  • 博文量
    895
  • 访问量
    933672