一. 简介
Langchain 框架:LangChain 是一个开源框架,是一个让大语言模型(如ChatGPT)能连接外部工具、记忆对话、执行复杂任务的"智能助手"开发框架,解决了LLM应用开发中的各种工程化问题。
python
# LangChain 的核心定位:LLM应用的"脚手架"
┌─────────────────────────────────────────────────┐
│ LangChain 的核心理念 │
├─────────────────────────────────────────────────┤
│ 🔗 连接LLM与外部工具和数据源 │
│ 🧩 模块化设计,像乐高一样组合功能 │
│ 🚀 简化复杂LLM应用的开发流程 │
│ 📚 提供丰富的工具链和最佳实践 │
│ 🔌 支持多种LLM(OpenAI、本地模型、开源模型) │
└─────────────────────────────────────────────────┘
二. LangChain 核心模型
-
完整模块结构
pythonLangChain_Modules = { "Models": { "功能": "连接各种LLM", "支持": ["OpenAI", "Anthropic", "本地模型", "HuggingFace", "Cohere", "Google PaLM"], "示例": "ChatOpenAI(), ChatOllama(), HuggingFacePipeline()", "子模块": { "LLMs": "文本补全模型(如GPT-3)", "Chat Models": "对话模型(如ChatGPT)", "Embeddings": "文本向量化模型" } }, "Prompts": { "功能": "模板化提示词管理", "特性": ["变量替换", "少样本示例", "输出解析器", "提示词优化"], "示例": "ChatPromptTemplate, FewShotPromptTemplate, PromptTemplate", "组件": { "Prompt Templates": "带变量的提示词模板", "Example Selectors": "动态选择少样本示例", "Output Parsers": "解析LLM输出为结构化数据" } }, "Chains": { "功能": "组合多个LLM调用", "类型": ["简单链", "顺序链", "路由链", "转换链", "Map-Reduce链"], "示例": "LLMChain, SequentialChain, TransformChain, RouterChain", "应用场景": { "问答系统": "检索 → 生成 → 验证", "文档总结": "分割 → 总结 → 合并", "代码生成": "需求分析 → 代码生成 → 测试" } }, "Agents": { "功能": "让LLM自主使用工具", "工具库": ["计算器", "网页搜索", "Python解释器", "API调用", "数据库查询", "文件操作"], "示例": "create_react_agent, create_json_agent, initialize_agent", "代理类型": { "Zero-shot": "零样本学习,根据工具描述选择", "ReAct": "思考-行动-观察循环", "Self-ask": "自我提问,分解复杂问题", "Plan-and-execute": "先规划再执行" } }, "Memory": { "功能": "管理对话历史", "类型": ["对话缓冲", "摘要记忆", "向量存储记忆", "实体记忆", "组合记忆"], "示例": "ConversationBufferMemory, ConversationSummaryMemory, VectorStoreRetrieverMemory", "存储方式": { "短期记忆": "保存最近对话(ConversationBufferMemory)", "长期记忆": "对话摘要(ConversationSummaryMemory)", "语义记忆": "向量检索相关历史(VectorStoreRetrieverMemory)", "实体记忆": "记住用户信息(EntityMemory)" } }, "Indexes": { "功能": "处理外部文档和数据", "组件": ["文档加载器", "文本分割器", "向量存储", "检索器"], "示例": "TextLoader, CharacterTextSplitter, FAISS, Chroma", "RAG流程": { "加载": "从各种来源加载文档(PDF、网页、数据库)", "分割": "将长文档切分为合适片段", "向量化": "将文本转换为向量表示", "存储": "存入向量数据库", "检索": "根据查询检索相关片段" } } }
三. 通过 Langchain 框架实现 ChatGPT 的使用
-
简单的代码实现
python# 导入LangChain的OpenAI聊天模型封装类 from langchain_openai import ChatOpenAI # 创建ChatOpenAI模型实例 # LangChain是对OpenAI API的高级封装,提供更多功能和便捷接口 llm = ChatOpenAI( # 指定使用的模型,gpt-4o是OpenAI最新的多模态模型 model="gpt-4o", # 可选:直接传入API密钥(不推荐,建议使用环境变量) # api_key="your-api-key-here", # 如果不想用环境变量,可以在这里直接传key # 可选:自定义API基础URL(用于代理或本地部署) # base_url="https://api.openai.com/v1", # 默认就是OpenAI官方API地址 # 其他可选参数(未在此示例中显示): # temperature: 控制输出的随机性,0-2之间,默认0.7 # max_tokens: 最大生成token数 # timeout: 请求超时时间 # streaming: 是否启用流式响应 ) # 定义消息列表,构建对话上下文 # LangChain使用特定的消息格式:(角色, 内容) 或 {"role": "...", "content": "..."} messages = [ # 系统消息:设置AI助手的角色和任务 ( "system", # 消息角色:系统,用于设定AI的行为和身份 "You are a helpful assistant that translates English to French. Translate the user sentence.", # 系统提示内容:定义助手为英法翻译器 ), # 用户消息:用户的输入 ( "human", # 消息角色:用户(human是LangChain中对user的别名) "I love programming.", # 用户输入内容:要翻译的英文句子 ), # 可以继续添加更多消息,如之前的AI回复: # ("ai", "J'aime la programmation."), # AI的回复 # ("human", "How about 'I enjoy learning'?"), # 用户的后续问题 ] # 调用模型生成回复 # invoke()方法是同步调用,会阻塞直到收到完整响应 ai_msg = llm.invoke(messages) # ai_msg是一个AIMessage对象,包含: # - content: AI的回复文本 # - additional_kwargs: 其他元数据(如token使用情况等) # 获取AI回复的文本内容 # translation = ai_msg.content # print(f"翻译结果: {translation}") # 注意:实际使用前需要设置环境变量 # export OPENAI_API_KEY="sk-your-key-here" 或设置在代码中