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)
 
  |