LangChain系列文章
LangChain使得原型化LLM应用程序和代理变得容易。然而,将LLM应用程序交付到生产环境可能会出乎意料地困难。您将不得不对提示、链条和其他组件进行迭代,以构建高质量的产品。
LangSmith使得调试、测试和持续改进LLM应用程序变得容易。
这在什么时候可能会派上用场?当您想要:
创建一个LangSmith账户并生成一个API密钥(见左下角)。通过查看文档来熟悉平台。
请注意,LangSmith目前处于封闭测试阶段;我们正在逐步向更多用户推出。但是,您可以在网站上填写表格以获得加快访问速度。
现在,让我们开始吧!
首先,配置您的环境变量,告诉LangChain记录跟踪。这可以通过将LANGCHAIN_TRACING_V2
环境变量设置为true
来完成。您可以通过设置LANGCHAIN_PROJECT
环境变量(如果未设置,运行将被记录到默认项目)来告诉LangChain要记录到哪个项目。如果该项目不存在,这将自动为您创建该项目。您还必须设置LANGCHAIN_ENDPOINT
和LANGCHAIN_API_KEY
环境变量。
有关设置跟踪的其他方法的更多信息,请参考LangSmith文档。
注意:您还可以在Python中使用上下文管理器来记录跟踪。
from langchain_core.tracers.context import tracing_v2_enabled
with tracing_v2_enabled(project_name="My Project"):
agent.run("How many people live in canada as of 2023?")
然而,在这个例子中,我们将使用环境变量。
%pip install --upgrade --quiet langchain langsmith langchainhub --quiet
%pip install --upgrade --quiet langchain-openai tiktoken pandas duckduckgo-search --quiet
import os
from uuid import uuid4
unique_id = uuid4().hex[0:8]
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = f"Tracing Walkthrough - {unique_id}"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGCHAIN_API_KEY"] = "" # Update to your API key
# Used by the agent in this tutorial
os.environ["OPENAI_API_KEY"] = ""
创建langsmith客户端以与API交互
from langsmith import Client
client = Client()
创建一个LangChain组件并将运行记录到平台上。在这个例子中,我们将创建一个ReAct风格的代理,可以访问一个通用搜索工具(DuckDuckGo)。代理的提示可以在这里的Hub中查看。
from langchain import hub
from langchain.agents import AgentExecutor
from langchain.agents.format_scratchpad import format_to_openai_function_messages
from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser
from langchain_community.tools import DuckDuckGoSearchResults
from langchain_openai import ChatOpenAI
# Fetches the latest version of this prompt
prompt = hub.pull("wfh/langsmith-agent-prompt:5d466cbc")
llm = ChatOpenAI(
model="gpt-3.5-turbo-16k",
temperature=0,
)
tools = [
DuckDuckGoSearchResults(
name="duck_duck_go"
), # General internet search using DuckDuckGo
]
llm_with_tools = llm.bind_functions(tools)
runnable_agent = (
{
"input": lambda x: x["input"],
"agent_scratchpad": lambda x: format_to_openai_function_messages(
x["intermediate_steps"]
),
}
| prompt
| llm_with_tools
| OpenAIFunctionsAgentOutputParser()
)
agent_executor = AgentExecutor(
agent=runnable_agent, tools=tools, handle_parsing_errors=True
)
我们正在同时在多个输入上运行代理,以减少延迟。运行日志会在后台记录到LangSmith,因此执行延迟不受影响。
inputs = [
"What is LangChain?",
"What's LangSmith?",
"When was Llama-v2 released?",
"What is the langsmith cookbook?",
"When did langchain first announce the hub?",
]
results = agent_executor.batch([{"input": x} for x in inputs], return_exceptions=True)
print(results[:2])
[{'input': 'What is LangChain?',
'output': 'I\'m sorry, but I couldn\'t find any information about "LangChain". Could you please provide more context or clarify your question?'},
{'input': "What's LangSmith?",
'output': 'I\'m sorry, but I couldn\'t find any information about "LangSmith". It could be a company, a product, or a person. Can you provide more context or details about what you are referring to?'}]
假设你已经成功设置好了你的环境,你的代理追踪应该会显示在应用程序的“项目”部分。恭喜!
看起来代理并没有有效地使用这些工具。让我们评估一下,这样我们就有一个基准。
https://github.com/zgpeace/pets-name-langchain/tree/develop
https://python.langchain.com/docs/langsmith/walkthrough