核心内容摘要
17cc永久地域网名:连接世界的数字脉络,开启无限可能
当然可以下面是一个完整的 Python 实例使用 LangChainv
2 / v
x 兼容演示其六大核心特色功能✅ 模块化组件Prompt LLM OutputParser✅ 外部数据集成RAG加载本地文档 向量检索✅ 记忆Memory多轮对话上下文✅ 链Chain声明式 LCEL 流水线✅ 代理Agent调用工具执行动作✅ 回调Callback打印日志 假设你已安装必要依赖pip install langchain langchain-openai langchain-community faiss-cpu pypdf 完整代码示例带记忆、知识库和工具的智能客服import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import FAISS from langchain.chains import create_history_aware_retriever, create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain from langchain_core.messages import HumanMessage, AIMessage from langchain.memory import ConversationBufferMemory from langchain.agents import Tool, initialize_agent, AgentType from langchain.callbacks import StdOutCallbackHandler #
设置大模型Model I/O llm ChatOpenAI( modelgpt-4o-mini, temperature
3, api_keyos.getenv(OPENAI_API_KEY) # 请设置环境变量 ) #
加载外部知识RAG 数据连接 # 假设当前目录有 faq.pdf可替换为任意 PDF/文本 loader PyPDFLoader(faq.pdf) docs loader.load() text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap
splits text_splitter.split_documents(docs) vectorstore FAISS.from_documents(splits, OpenAIEmbeddings()) retriever vectorstore.as_retriever() #
构建带记忆的检索问答链Chain Memory prompt ChatPromptTemplate.from_messages([ (system, 你是一个客服助手。
请基于以下上下文回答问题\n{context}), MessagesPlaceholder(variable_namechat_history), (human, {input}) ]) document_chain create_stuff_documents_chain(llm, prompt) retriever_chain create_history_aware_retriever(llm, retriever, ChatPromptTemplate.from_messages([ MessagesPlaceholder(variable_namechat_history), (human, {input}), (human, 根据对话历史生成一个搜索查询以查找相关信息。
) ]) ) qa_chain create_retrieval_chain(retriever_chain, document_chain) #
定义工具Tools for Agent def send_email(to: str, content: str) - str: # 模拟发邮件实际可调用 SMTP 或 API return f✅ 邮件已发送至 {to}内容{content[:30]}... email_tool Tool( namesend_email, funcsend_email, description当用户要求发送邮件时使用参数to邮箱地址content邮件内容 ) #
初始化带工具的 AgentAgents agent initialize_agent( tools[email_tool], llmllm, agentAgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verboseTrue, memoryConversationBufferMemory(memory_keychat_history, return_messagesTrue), handle_parsing_errorsTrue ) #
回调处理器Callbacks handler StdOutCallbackHandler() #
模拟用户交互 chat_history [] def ask_question(user_input: str): global chat_history # 先尝试用 RAG 知识库回答 try: response qa_chain.invoke({ input: user_input, chat_history: chat_history }) answer response[answer] chat_history.extend([HumanMessage(contentuser_input), AIMessage(contentanswer)]) print(f (知识库): {answer}\n) except Exception as e: answer None # 如果知识库无法回答交给 Agent 决策是否调用工具 if not answer or 不知道 in answer or 无法回答 in answer: print( 转交 Agent 处理...) agent_response agent.run(user_input, callbacks[handler]) chat_history.append(HumanMessage(contentuser_input)) chat_history.append(AIMessage(contentagent_response)) print(f (Agent): {agent_response}\n) #
测试对话 if __name__ __main__: # 示例先问知识库问题再要求发邮件 ask_question(你们的退货政策是什么) # 从 faq.pdf 中检索 ask_question(请把刚才的回答发到 userexample.com) # 触发 send_email 工具 功能亮点说明表格特性代码体现模块化ChatPromptTemplateStrOutputParserFAISS各司其职RAG用PyPDFLoaderFAISS构建私有知识库记忆chat_history传递上下文支持多轮问答链LCELcreate_retrieval_chain是典型 Chain 编排Agent Toolsinitialize_agent 自定义send_email工具回调StdOutCallbackHandler()打印执行过程 使用前准备设置 OpenAI API Keyexport OPENAI_API_KEYyour-key准备一个faq.pdf文件或修改代码加载其他文档首次运行会下载 embedding 模型约 500MB这个例子展示了 LangChain 如何将知识检索、对话记忆、工具调用无缝融合构建一个接近生产级的智能应用。
你可以在此基础上扩展数据库查询、Web 搜索、多模态等能力。
需要更简化的版本或特定场景如纯代码生成、Excel 分析也可以告诉我