参考

LangChain文档.langchain
Chroma向量数据库
RAG检索增强生成
飞书AI机器人agent+MCP+Skill设计与实现

LangChain例子

lang_chain_demo.py

uv run .\lang_chain\lang_chain_demo.py
"""
LangChain 最小示例
==================
LangChain 是构建 LLM 应用的框架,把「调用模型」「组装 prompt」
「管理对话历史」等常见步骤封装成统一的模块。

本示例演示三个核心用法:
  1. 最简单的一问一答
  2. 带系统提示的对话
  3. 多轮对话(带上下文记忆)

安装依赖:
    uv add langchain langchain-openai python-dotenv

.env 文件:
    OPENAI_API_KEY=sk-...
"""
import os
import sys
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, 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  : 限制回复长度
llm = ChatOpenAI(model="MiniMax-M2.5", temperature=0.7, max_tokens=500)

# ─────────────────────────────────────────────
# 2. 最简单的一问一答
# ─────────────────────────────────────────────
messages = [
   SystemMessage(content="你必须用中文回答所有问题。回答简洁、直接。"),
    HumanMessage(content="Python 和 Go 有什么区别?"),
]
# response = llm.invoke("中文回答 Python 和 Go 有什么区别?")
response = llm.invoke(messages)
print("=== 简单问答 ===")
print(response.content)
print()

# ─────────────────────────────────────────────
# 3. 带系统提示
# ─────────────────────────────────────────────
# SystemMessage : 设定模型的角色和行为
# HumanMessage  : 用户的输入
messages = [
    SystemMessage(content="你是一个专业的 Python 代码审查员,回答简洁、直接。"),
    HumanMessage(content="for i in range(len(lst)): 这样写有什么问题?"),
]

response = llm.invoke(messages)
print("=== 带系统提示 ===")
print(response.content)
print()

# ─────────────────────────────────────────────
# 4. 多轮对话(手动维护历史)
# ─────────────────────────────────────────────
# LangChain 不会自动记住上下文,需要把历史消息一起传进去。
# 每轮对话的流程:
#   ① 把用户消息加入历史
#   ② 把完整历史传给模型
#   ③ 把模型回复也加入历史,供下一轮使用

chat_history = [
    SystemMessage(content="你是一个 Python 教学助手。")
]

def chat(user_input: str):
    chat_history.append(HumanMessage(content=user_input))
    response = llm.invoke(chat_history)
    chat_history.append(AIMessage(content=response.content))  # 保存 AI 回复
    return response.content

print("=== 多轮对话 ===")
print("用户:什么是列表推导式?")
print("AI  :", chat("什么是列表推导式?"))
print()
print("用户:给我一个实际的例子")
print("AI  :", chat("给我一个实际的例子"))  # 模型能记住上一轮的话题


sys.exit(0)
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐