0 Useful Docs
1 Setup
installation guide
2 LangSmith
在使用LangChain构建的应用程序中,许多都会包含多个步骤以及多次调用语言模型(LLM)。LangSmith能够检查链或agent内部具体发生了什么。
注册并登录后,确保设置环境变量以开始记录跟踪:
1 2 3
| export LANGSMITH_TRACING="true" export LANGSMITH_API_KEY="..." export LANGSMITH_PROJECT="default"
|
若在notebook环境中,则可以通过以下代码设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import getpass import os
try: from dotenv import load_dotenv load_dotenv() except ImportError: pass
os.environ["LANGSMITH_TRACING"] = "true"
if "LANGSMITH_API_KEY" not in os.environ: os.environ["LANGSMITH_API_KEY"] = getpass.getpass(prompt="输入您的LangSmith API密钥(可选):") if "LANGSMITH_PROJECT" not in os.environ: project_name = getpass.getpass(prompt='输入您的LangSmith项目名称(默认为"default"):') os.environ["LANGSMITH_PROJECT"] = project_name if project_name else "default" if "OPENAI_API_KEY" not in os.environ: os.environ["OPENAI_API_KEY"] = getpass.getpass(prompt="输入您的OpenAI API密钥(如果使用OpenAI则必须):")
|
3 Using Language Models
LangChain支持多种不同的语言模型,可以单独使用这些语言模型,它们可以根据需要互换使用。chat model。
1 2 3
| pip install -qU "langchain[openai]" pip install -qU dashscope
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import getpass import os
if not os.environ.get("OPENAI_API_KEY"): os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-4o-mini", model_provider="openai")
from langchain_community.chat_models import ChatTongyi
tongyi_chat = ChatTongyi( model="qwen-max", )
|
首先,可以直接使用模型。聊天模型(ChatModels)是LangChain运行体(Runnables)的实例,它们提供了一个标准接口以供交互。若要简单调用模型,可以通过.invoke方法传入消息列表。
1 2 3 4 5 6 7 8
| from langchain_core.messages import HumanMessage, SystemMessage
messages = [ SystemMessage("Translate the following from English into Italian"), HumanMessage("hi!"), ]
model.invoke(messages)
|
API参考:HumanMessage | SystemMessage
若已启用LangSmith,则能够看到此次运行已被记录到LangSmith中,并可以查看相应的LangSmith trace。LangSmith报告提供了token使用情况、延迟时间、标准模型参数(如temperature设置)及其他相关信息。
需要注意的是,聊天模型接收 message 对象作为输入,并生成消息对象作为输出。除了文本内容外,消息对象还传达了对话 roles ,并保存了重要数据,例如工具调用和token使用计数。
LangChain同样支持通过字符串或OpenAI格式进行聊天模型输入。以下是等效的方式:
1 2 3 4 5
| model.invoke("Hello")
model.invoke([{"role": "user", "content": "Hello"}])
model.invoke([HumanMessage("Hello")])
|
streaming
由于聊天模型是Runnables,它们提供了一个标准接口,该接口包括异步和流模式调用。这使我们能够从聊天模型中流式传输单个令牌:
- 使用这种机制可以实现实时信息更新,允许在处理复杂请求或长对话时逐步显示结果。
- 异步和流式处理的引入提高了应用程序的响应速度和效率,尤其适合需要即时反馈的场景。
1 2
| for token in model.stream(messages): print(token.content, end="|")
|
更多信息参考https://python.langchain.com/docs/how_to/chat_streaming/
4 Prompt Templates
当前我们直接将消息列表传递给语言模型。通常,消息列表是由用户输入和应用程序逻辑组合构建的。应用程序逻辑通常会获取用户的原始输入,并将其转换成一个准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入来填充模板。
在LangChain中,Prompt templates这一概念旨在帮助进行此类转换。提示模板接收用户的原始输入,并返回准备好传递给语言模型的数据(即prompt)。
下面创建一个提示模板,它将接收两个用户变量:
- language:要翻译文本的目标语言
- text:要翻译的文本
1 2 3 4 5 6 7
| from langchain_core.prompts import ChatPromptTemplate
system_template = "Translate the following text into {language}"
prompt_template = ChatPromptTemplate.from_messages( [("system", system_template), ("user", "{text}")] )
|
API参考:ChatPromptTemplate
该模板接受一个字典作为参数
1 2 3
| prompt = prompt_template.invoke({"language": "Italian", "text": "hi!"})
prompt
|
1 2
| response = model.invoke(prompt) print(response.content)
|