一、前言
LangSmith是一个用于构建生产级 LLM 应用程序的平台,它提供了调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的功能,并能与LangChain无缝集成。通过使用LangSmith帮助开发者深入了解模型在不同场景下的表现,让开发者能够更高效地进行模型相关的开发、调试和管理。
二、术语
2.1.LangChain
是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。
LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。
LangChain的主要特性:
1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
2.允许语言模型与其环境交互
3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。
2.2.LangSmith
是一个用于构建生产级 LLM 应用程序的平台,它提供了调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的功能,并能与 LangChain 无缝集成。其主要作用包括:
- 调试与测试:通过记录langchain构建的大模型应用的中间过程,开发者可以更好地调整提示词等中间过程,优化模型响应。
- 评估应用效果:langsmith可以量化评估基于大模型的系统的效果,帮助开发者发现潜在问题并进行优化。
- 监控应用性能:实时监控应用程序的运行情况,及时发现异常和错误,确保其稳定性和可靠性。
- 数据管理与分析:对大语言模型此次的运行的输入与输出进行存储和分析,以便开发者更好地理解模型行为和优化应用。
- 团队协作:支持团队成员之间的协作,方便共享和讨论提示模板等。
- 可扩展性与维护性:设计时考虑了应用程序的可扩展性和长期维护,允许开发者构建可成长的系统。
2.3.LangChain和LangSmith的关系
LangSmith是LangChain的一个子产品,是一个大模型应用开发平台。它提供了从原型到生产的全流程工具和服务,帮助开发者构建、测试、评估和监控基于LangChain或其他 LLM 框架的应用程序。
LangSmith与LangChain 的关系可以概括为:LangChain是一个开源集成开发框架,而 LangSmith是基于LangChain 构建的一个用于大模型应用开发的平台。
三、前提条件
3.1.安装虚拟环境
conda create --name langsmith python=3.10
conda activate langsmith
pip install -U langsmith -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple
3.2.创建API key
操作入口:LangSmith
https://smith.langchain.com/settings未登录的需要先进行登录:

登录成功:

点击Settings:

点击Create API Key:


记录API Key:

3.3.设置环境变量
windows:

linux:
export LANGCHAIN_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ps:
1.需要替换3.2创建的API Key
2.同理设置OPENAI_API_KEY
四、技术实现
4.1.追踪代码示例一
The @traceable decorator is a simple way to log traces from the LangSmith Python SDK. Simply decorate any function with @traceable.
# -*- coding = utf-8 -*-
import os
import openai
from langsmith.wrappers import wrap_openai
from langsmith.run_helpers import traceable
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'lsv2_pt_xxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
if __name__ == '__main__':
client = wrap_openai(openai.Client())
@traceable # Auto-trace this function
def pipeline(user_input: str):
result = client.chat.completions.create(
messages=[{"role": "user", "content": user_input}],
model="gpt-3.5-turbo"
)
return result.choices[0].message.content
print(pipeline("我家在广州,请推荐一下特色美食?"))
调用结果:
LangSmith跟踪记录:


IDEA输出:

4.2.追踪代码示例二
# -*- coding = utf-8 -*-
import os
from langsmith import traceable
from openai import Client
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'lsv2_pt_xxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
if __name__ == '__main__':
openai = Client()
@traceable
def format_prompt(region):
return [
{
"role": "system",
"content": "You are a helpful assistant.",
},
{
"role": "user",
"content": f"我家在{region},请推荐一下特色美食?"
}
]
@traceable(run_type="llm")
def invoke_llm(messages):
return openai.chat.completions.create(
messages=messages, model="gpt-3.5-turbo", temperature=0
)
@traceable
def parse_output(response):
return response.choices[0].message.content
@traceable
def run_pipeline(region):
messages = format_prompt(region)
response = invoke_llm(messages)
return parse_output(response)
print(run_pipeline('广州'))
调用结果:
LangSmith跟踪记录:


IDEA输出:

4.3.追踪代码示例三
# -*- coding = utf-8 -*-
import openai
import os
from langsmith import traceable
from langsmith.wrappers import wrap_openai
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'lsv2_pt_xxxxxxxxxxxxxxxxxxxxxx' #你的Open AI Key
if __name__ == '__main__':
client = wrap_openai(openai.Client())
@traceable(run_type="tool", name="Retrieve Context")
def my_tool(question: str) -> str:
return '''
广州市今天(5月19日)大到暴雨,最低温度21℃,最高温度25℃,空气质量优,pm2.5指数34,湿度95,北风2级。
未来几天天气情况如下:
5月20日:暴雨,22℃~26℃,北风1级,湿度89;
5月21日:中雨,23℃~28℃,北风1级,湿度83;
5月22日:雷阵雨,23℃~30℃,北风1级,湿度85;
5月23日:雷阵雨,22℃~30℃,北风1级,湿度91;
5月24日:雷阵雨,22℃~29℃,南风3级,湿度90;
5月25日:中雨,23℃~25℃,北风1级,湿度87;
5月26日:小雨,23℃~28℃,东南风1级,湿度83。
'''
@traceable(name="Chat Pipeline")
def chat_pipeline(question: str):
context = my_tool(question)
messages = [
{"role": "system","content": "You are a helpful assistant. Please respond to the user's request only based on the given context."},
{"role": "user", "content": f"Question: {question}\nContext: {context}"}
]
chat_completion = client.chat.completions.create(
model="gpt-3.5-turbo", messages=messages, temperature=0,max_tokens=128
)
return chat_completion.choices[0].message.content
print(chat_pipeline("总结广州5月19日天气情况?"))
调用结果:
LangSmith跟踪记录:


IDEA输出:

五、附带说明
5.1.Pricing
Pricing | 🦜️🛠️ LangSmithPlans
https://docs.smith.langchain.com/pricing
