参考LangChain文档.langchainChroma向量数据库RAG检索增强生成飞书AI机器人agentMCPSkill设计与实现LangChain例子lang_chain_demo.pyuv run .\lang_chain\lang_chain_demo.py LangChain 最小示例 LangChain 是构建 LLM 应用的框架把「调用模型」「组装 prompt」 「管理对话历史」等常见步骤封装成统一的模块。 本示例演示三个核心用法 1. 最简单的一问一答 2. 带系统提示的对话 3. 多轮对话带上下文记忆 安装依赖 uv add langchain langchain-openai python-dotenv .env 文件 OPENAI_API_KEYsk-... importosimportsysfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessage# 设置 OPENAI_API_KEY 环境变量os.environ[OPENAI_API_KEY]sk-# 设置 OPENAI_BASE_URL 环境变量os.environ[OPENAI_BASE_URL]https://api.edgefn.net/v1#load_dotenv() # 从 .env 文件读取 OPENAI_API_KEY# ─────────────────────────────────────────────# 1. 初始化模型# ─────────────────────────────────────────────# temperature : 0 确定性强1 更有创意# max_tokens : 限制回复长度llmChatOpenAI(modelMiniMax-M2.5,temperature0.7,max_tokens500)# ─────────────────────────────────────────────# 2. 最简单的一问一答# ─────────────────────────────────────────────messages[SystemMessage(content你必须用中文回答所有问题。回答简洁、直接。),HumanMessage(contentPython 和 Go 有什么区别),]# response llm.invoke(中文回答 Python 和 Go 有什么区别?)responsellm.invoke(messages)print( 简单问答 )print(response.content)print()# ─────────────────────────────────────────────# 3. 带系统提示# ─────────────────────────────────────────────# SystemMessage : 设定模型的角色和行为# HumanMessage : 用户的输入messages[SystemMessage(content你是一个专业的 Python 代码审查员回答简洁、直接。),HumanMessage(contentfor i in range(len(lst)): 这样写有什么问题),]responsellm.invoke(messages)print( 带系统提示 )print(response.content)print()# ─────────────────────────────────────────────# 4. 多轮对话手动维护历史# ─────────────────────────────────────────────# LangChain 不会自动记住上下文需要把历史消息一起传进去。# 每轮对话的流程# ① 把用户消息加入历史# ② 把完整历史传给模型# ③ 把模型回复也加入历史供下一轮使用chat_history[SystemMessage(content你是一个 Python 教学助手。)]defchat(user_input:str):chat_history.append(HumanMessage(contentuser_input))responsellm.invoke(chat_history)chat_history.append(AIMessage(contentresponse.content))# 保存 AI 回复returnresponse.contentprint( 多轮对话 )print(用户什么是列表推导式)print(AI ,chat(什么是列表推导式))print()print(用户给我一个实际的例子)print(AI ,chat(给我一个实际的例子))# 模型能记住上一轮的话题sys.exit(0)