MCP -> Agent memory -> 记忆 chain -> 链条 prompt -> 提示词 有了共同记忆能够更好地理解诉求从而达到高效聊天的目的 一个问题可以通过多个大模型进行处理利用链条将他们连起来,从而发挥每个大模型的长处 利用模版等技术构建提示词体系,应对不同问题使用不同的提示词模版进行精准提问
# 导入操作系统模块,用于操作环境变量
import os
# 从 langchain_core.output_parsers 导入 StrOutputParser,用于解析模型输出为字符串
from langchain_core.output_parsers import StrOutputParser
# 从自定义的配置模块导入密钥加载函数,用于安全地获取API密钥
from config.load_key import load_key
# 从 langchain_core.prompts 导入 ChatPromptTemplate,用于创建聊天提示模板
from langchain_core.prompts import ChatPromptTemplate
# 从 langchain_openai 导入 ChatOpenAI,用于与OpenAI模型交互
from langchain_openai import ChatOpenAI
# 设置LangSmith追踪功能为开启状态,用于监控应用执行情况
os.environ["LANGSMITH_TRACING"] = "true"
# 设置LangSmith项目名称,用于在平台上标识当前项目
os.environ["LANGSMITH_PROJECT"] = "firstLangChainDemo"
# 从配置文件中加载LangSmith的API密钥并设置到环境变量中
os.environ["LANGSMITH_API_KEY"] = load_key("LANGSMITH_API_KEY")
# 检查环境变量中是否已存在OpenAI API密钥,如果不存在则从配置文件中加载
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = load_key("OPENAI_API_KEY")
# 创建聊天提示模板,包含系统消息和用户消息两部分
prompt_template = ChatPromptTemplate.from_messages([
# 系统消息模板,指示模型将英文翻译成指定语言,使用 {language} 和 {text} 作为占位符
("system","Translat the following from English into {language}"),
# 用户消息模板,包含待翻译的文本占位符 {text}
("user","{text}")
])
# 初始化ChatOpenAI实例,配置模型参数
llm = ChatOpenAI(model="gpt-4o-mini", base_url="https://api.****", api_key=os.environ["OPENAI_API_KEY"])
# 创建字符串输出解析器实例
parcer = StrOutputParser ()
# 构建处理链:提示模板 -> 模型 -> 输出解析器
chain = prompt_template | llm | parcer
# 调用处理链进行翻译并打印结果
print("翻译结果:", chain.invoke({"language":"Chinese","text":"I like programming. How about you?"}))
# 创建分析提示模板,用于生成回应建议
analysis_prompt = ChatPromptTemplate.from_template("我该怎么回答他呢?{text}。给我一句话的提示")
# 构建第二个处理链:将第一个链的结果作为{text}输入到提示模板中
chain2 ={"text":chain} | prompt_template | llm | parcer
# 调用第二个处理链并打印结果
print(chain2.invoke({"language":"Chinese", "text":"I like programming. How about you?"}))
# 翻译结果: 我喜欢编程。你呢?
# 可以回答:“我也喜欢编程,特别是解决问题和创造新项目!”
# 导入操作系统模块,用于操作环境变量
import os
# 从 langchain_classic.schema.runnable.base 导入 RunnableMap,用于并行执行多个链
from langchain_classic.schema.runnable.base import RunnableMap
# 从 langchain_core.output_parsers 导入 StrOutputParser,用于解析模型输出为字符串
from langchain_core.output_parsers import StrOutputParser
# 从 langchain_core.runnables 导入 RunnableLambda,用于创建可运行的 Lambda 函数
from langchain_core.runnables import RunnableLambda
# 从自定义的配置模块导入密钥加载函数,用于安全地获取API密钥
from config.load_key import load_key
# 从 langchain_core.prompts 导入 ChatPromptTemplate,用于创建聊天提示模板
from langchain_core.prompts import ChatPromptTemplate
# 从 langchain_openai 导入 ChatOpenAI,用于与OpenAI模型交互
from langchain_openai import ChatOpenAI
# 从 langchain_core.messages 导入 HumanMessage,用于创建人类消息对象
from langchain_core.messages import HumanMessage
# 设置LangSmith追踪功能为开启状态,用于监控应用执行情况
os.environ["LANGSMITH_TRACING"] = "true"
# 设置LangSmith项目名称,用于在平台上标识当前项目
os.environ["LANGSMITH_PROJECT"] = "firstLangChainDemo"
# 从配置文件中加载LangSmith的API密钥并设置到环境变量中
os.environ["LANGSMITH_API_KEY"] = load_key("LANGSMITH_API_KEY")
# 检查环境变量中是否已存在OpenAI API密钥,如果不存在则从配置文件中加载
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = load_key("OPENAI_API_KEY")
# 创建中文翻译的聊天提示模板,包含系统消息和用户消息两部分
prompt_template_zh = ChatPromptTemplate.from_messages([
# 系统消息:指示模型将英文翻译成中文
("system","Translat the following from English into Chinese"),
# 用户消息:包含待翻译的文本占位符 {text}
("user","{text}")
])
# 创建日文翻译的聊天提示模板,包含系统消息和用户消息两部分
prompt_template_jp = ChatPromptTemplate.from_messages([
# 系统消息:指示模型将英文翻译成日文
("system","Translat the following from English into Japanese"),
# 用户消息:包含待翻译的文本占位符 {text}
("user","{text}")
])
# 初始化ChatOpenAI实例,配置模型参数
# 指定模型名称、API基础URL和API密钥
llm = ChatOpenAI(model="gpt-4o-mini", base_url="https://api.****", api_key=os.environ["OPENAI_API_KEY"])
# 创建中文翻译链:提示模板 -> 模型 -> 字符串解析器
chain_zh = prompt_template_zh | llm | StrOutputParser()
# 创建日文翻译链:提示模板 -> 模型 -> 字符串解析器
chain_jp = prompt_template_jp | llm | StrOutputParser()
# 创建并行链映射,同时执行中文和日文翻译链
parallel_chains = RunnableMap({
"Chinese": chain_zh,
"Japanese": chain_jp
})
# 创建最终链:并行链 -> 格式化输出的Lambda函数
# 将中英文翻译结果格式化为易读的字符串
final_chain = parallel_chains | RunnableLambda(lambda x: f"Chinese: {x['Chinese']}\nJapanese: {x['Japanese']}")
# 调用最终链进行翻译并打印结果
# 传入包含待翻译文本的字典参数
print(final_chain.invoke({"text": "I love programming."}))
# Chinese: 我爱编程。
# Japanese: 私はプログラミングが大好きです。