# LangSmith 调试与综合项目实战:从追踪到评估,打造生产级智能客服助手
LangSmith 调试与综合项目实战:从追踪到评估,打造生产级智能客服助手
摘要:LangChain 应用能跑起来只是第一步,如何调试、观察和评估效果才是真实项目的核心挑战。本文系统梳理 LangChain 第11章完整内容,从 LangSmith 追踪配置、7个实战案例(普通调用追踪、LCEL Chain 追踪、Agent 工具调用追踪、Chain 评估、RAG 评估、Agent 评估、LangSmith 平台评估),到企业智能客服综合项目(RAG + Agent 组合),再到上线前完整的 Prompt / RAG / Agent / 评估 / 安全检查清单。每个知识点均配有可直接运行的代码示例,帮你建立从开发到上线的完整质量保障体系。
目录
- 一、本章目标
- 二、为什么需要 LangSmith
- 三、LangSmith 能看到什么
- 四、开通和配置 LangSmith
- 五、安装依赖
- 六、案例一:追踪一次普通模型调用
- 七、案例二:追踪 LCEL Chain
- 八、案例三:追踪 Agent 工具调用
- 九、什么是评估
- 十、案例四:评估普通 Chain
- 十一、案例五:评估 RAG 问答
- 十二、案例六:评估 Agent 工具调用
- 十三、案例七:通过 LangSmith 进行评估
- 十四、综合项目:企业智能客服助手
- 14.1 项目需求
- 14.2 项目结构
- 14.3 requirements.txt
- 14.4 model_factory.py
- 14.5 business_tools.py
- 14.6 customer_agent.py
- 14.7 app.py
- 14.8 eval_app.py
- 十五、综合项目运行顺序
- 十六、上线前检查清单
- 十七、常见问题
- 十八、本章重点
- 封面图提示词
一、本章目标
前面章节已经完成了 LangChain 的核心能力:
- 调用 DeepSeek
- 使用 Prompt 模板
- 结构化输出
- LCEL 链式调用
- 文档加载与切分
- Embedding 和向量数据库
- RAG 知识库问答
- Tool 和 Agent
这一章开始关注一个真实项目中非常重要的问题:
应用能跑起来之后,如何调试、观察和评估效果?
学完本章后,你应该能够:
- 理解 LangSmith 的作用
- 开启 LangChain 调用追踪
- 在 LangSmith 中查看模型调用、Prompt、Token 和耗时
- 给不同项目设置追踪名称
- 给运行过程添加标签和元数据
- 编写简单的测试集评估 RAG 效果
- 编写简单的测试集评估 Agent 工具调用
- 完成一个课程综合项目
- 理解上线前应该检查哪些关键问题
二、为什么需要 LangSmith
在简单案例中,我们通常只看终端输出:
回答:退款通常在 1 至 3 个工作日到账。
但真实项目出问题时,只看最终输出远远不够。例如:
RAG 回答错了
你需要知道:
- 用户原始问题是什么
- Retriever 检索到了哪些文档
- Prompt 最终长什么样
- 模型输入了多少 Token
- 模型输出了什么
- 哪一步耗时最长
- Agent 有没有调用工具
- 工具参数是否正确
- 工具返回了什么
LangSmith 就是用来观察、调试和评估大模型应用的平台。 它可以把一次 LangChain 调用记录成完整链路。
三、LangSmith 能看到什么
开启追踪后,LangSmith 中可以看到:
| 内容 | 作用 |
|---|---|
| Trace | 一次完整调用链路 |
| Run | 链路中的一个步骤 |
| Input | 当前步骤输入 |
| Output | 当前步骤输出 |
| Prompt | 发送给模型的提示词 |
| Tool Call | Agent 调用工具的记录 |
| Token | 模型输入和输出消耗 |
| Latency | 每一步耗时 |
| Error | 报错信息 |
| Metadata | 自定义业务信息 |
对于 RAG 项目,重点看:
- 检索问题是否正确
- 检索结果是否相关
- 上下文是否传给模型
- 模型是否根据资料回答
对于 Agent 项目,重点看:
- 是否调用了工具
- 调用了哪个工具
- 工具参数是否正确
- 工具结果是否被模型正确使用
四、开通和配置 LangSmith
访问:https://smith.langchain.com/
登录后创建 API Key。
在项目根目录创建 .env:
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=lsv2_xxxxxxxxxxxxxx
LANGSMITH_PROJECT=customer-service
DEEPSEEK_API_KEY=sk-f3c7557e9fc54541802fd638de03bbeb
DEEPSEEK_BASE_URL=https://api.deepseek.com
环境变量说明:
| 变量 | 作用 |
|---|---|
LANGSMITH_TRACING | 是否开启追踪 |
LANGSMITH_API_KEY | LangSmith API Key |
LANGSMITH_PROJECT | 追踪记录所属项目 |
DEEPSEEK_API_KEY | DeepSeek API Key |
DEEPSEEK_BASE_URL | DeepSeek OpenAI 兼容接口地址 |
如果暂时不想开启 LangSmith,可以改成:
LANGSMITH_TRACING=false
五、安装依赖
安装本章依赖:
pip install langsmith langchain-openai
国内镜像:
pip install langsmith langchain-openai -i https://pypi.tuna.tsinghua.edu.cn/simple
如果要运行综合 RAG 和 Agent 项目,还需要:
pip install langchain langchain-community chromadb sentence-transformers
六、案例一:追踪一次普通模型调用
创建 01_trace_chat.py:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
load_dotenv()
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
response = model.invoke([HumanMessage(content="你好,请介绍一下 LangChain")])
print(response.content)
运行:
python 01_trace_chat.py
如果 .env 中配置了:
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=lsv2_xxxxxxxxxxxxxx
运行后就可以在 LangSmith 项目中看到这次调用。
你可以重点查看:
- 输入内容
- 模型输出
- 调用耗时
- Token 消耗
- 模型名称
七、案例二:追踪 LCEL Chain
创建 02_trace_chain.py:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
prompt = ChatPromptTemplate.from_template("请用一句话解释:{topic}")
chain = prompt | model | StrOutputParser()
result = chain.invoke(
{"topic": "RAG"},
config={
"run_name": "rag_explain",
"tags": ["demo", "lcel"],
"metadata": {"user_id": "user_001", "session_id": "sess_123"},
},
)
print(result)
运行:
python 02_trace_chain.py
这里的 config 可以给本次运行增加信息:
run_name:运行名称,方便在 LangSmith 中筛选tags:标签,用于分类和过滤metadata:元数据,可以存储业务信息
在 LangSmith 中,run_name、tags 和 metadata 可以帮助你筛选和定位调用记录。
八、案例三:追踪 Agent 工具调用
创建 03_trace_agent.py:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain.tools import tool
from langchain_core.messages import HumanMessage
load_dotenv()
@tool
def query_order(order_id: str) -> str:
"""查询订单状态"""
return f"订单 {order_id} 已发货,预计 2 天到达。"
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
agent = create_agent(
model=model,
tools=[query_order],
system_prompt="你是一个客服助手,可以查询订单状态。",
)
result = agent.invoke({"messages": [HumanMessage(content="订单 A1002 发货了吗?")]})
for msg in result["messages"]:
print(f"{type(msg).__name__}: {msg.content}")
运行:
python 03_trace_agent.py
在 LangSmith 中可以看到:
用户提问 → 大模型识别需要调用工具 → 调用查询订单接口 → 获取接口数据 → 大模型把原始数据整理成自然语言回答用户
这对调试 Agent 非常有用。
如果 Agent 没有调用工具,可以在 Trace 中检查:
- 工具描述是否传给模型
- 用户问题是否包含订单号
- 模型是否直接生成了答案
- 工具调用参数是否错误
九、什么是评估
调试解决的是单次调用问题。评估关注的是一批问题的整体效果。
例如 RAG 知识库问答,我们希望知道:
- 100 个问题里有多少回答正确
- 检索到的文档是否相关
- 模型有没有编造答案
最简单的评估方式是准备测试集:
test_cases = [
{
"question": "每个月可以补卡几次",
"expected_keywords": ["3", "三次"],
},
{
"question": "退款多久到账",
"expected_keywords": ["1", "3", "工作日"],
},
]
然后批量调用应用,检查答案中是否包含预期关键词。
这种程序可以称为一个简单的评估 harness。
十、案例四:评估普通 Chain
创建 04_eval_chain.py:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
prompt = ChatPromptTemplate.from_template("请用一句话解释:{topic}")
chain = prompt | model | StrOutputParser()
# 测试集
test_cases = [
{"topic": "RAG", "expected_keywords": ["检索", "增强"]},
{"topic": "Agent", "expected_keywords": ["工具", "调用"]},
{"topic": "MCP", "expected_keywords": ["协议", "上下文"]},
]
# 运行评估
for case in test_cases:
result = chain.invoke({"topic": case["topic"]})
passed = any(kw in result for kw in case["expected_keywords"])
status = "通过" if passed else "失败"
print(f"[{status}] {case['topic']}: {result}")
运行:
python 04_eval_chain.py
关键词评估很简单,但适合入门。真实项目中还可以继续增加:
- 人工评分
- 大模型评分
- 标准答案对比
- 检索结果相关性评估
- 工具调用正确性评估
十一、案例五:评估 RAG 问答
下面复用第八章的 RAGService。
项目中已有:
build_index.py:构建知识库索引rag_service.py:RAG 问答服务data/faq.md:知识库文档
创建 05_eval_rag.py:
from dotenv import load_dotenv
from rag_service import RAGService
load_dotenv()
rag = RAGService()
# 测试集:问题 + 预期关键词
test_cases = [
{
"question": "每个月可以补卡几次",
"expected_keywords": ["3", "三次"],
},
{
"question": "退款多久到账",
"expected_keywords": ["1", "3", "工作日"],
},
{
"question": "支持哪些支付方式",
"expected_keywords": ["微信", "支付宝", "银行卡"],
},
{
"question": "会员有什么权益",
"expected_keywords": ["折扣", "积分", "优先"],
},
]
# 批量评估
for case in test_cases:
answer = rag.ask(case["question"])
passed = any(kw in answer for kw in case["expected_keywords"])
status = "通过" if passed else "失败"
print(f"[{status}] Q: {case['question']}")
print(f" A: {answer[:80]}...")
print()
运行:
python 05_eval_rag.py
如果某个用例失败,建议按下面顺序排查:
- 检索到的文档是否包含答案(Retriever 问题)
- Prompt 中上下文是否正确传递(Prompt 问题)
- 模型是否根据上下文回答(模型问题)
- 关键词是否在答案中但措辞不同(评估标准问题)
这个顺序比盲目修改 Prompt 更有效。
十二、案例六:评估 Agent 工具调用
Agent 的评估不仅要看最终回答,还要看是否调用了正确工具。
创建 06_eval_agent.py:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain.tools import tool
from langchain_core.messages import HumanMessage
load_dotenv()
@tool
def query_order(order_id: str) -> str:
"""查询订单状态"""
return f"订单 {order_id} 已发货。"
@tool
def check_stock(product_id: str) -> str:
"""查询库存"""
return f"商品 {product_id} 库存充足。"
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
agent = create_agent(
model=model,
tools=[query_order, check_stock],
system_prompt="你是一个客服助手,可以查询订单和库存。",
)
# 测试集:问题 + 预期调用的工具
test_cases = [
{
"question": "订单 A1002 发货了吗",
"expected_tool": "query_order",
"expected_keywords": ["发货"],
},
{
"question": "商品 P2001 还有库存吗",
"expected_tool": "check_stock",
"expected_keywords": ["库存"],
},
]
for case in test_cases:
result = agent.invoke({"messages": [HumanMessage(content=case["question"])]})
messages = result["messages"]
# 检查是否调用了预期工具
tool_calls = [msg for msg in messages if hasattr(msg, "tool_calls") and msg.tool_calls]
actual_tool = tool_calls[-1].tool_calls[0]["name"] if tool_calls else "未调用"
tool_passed = actual_tool == case["expected_tool"]
# 检查答案关键词
final_answer = messages[-1].content
answer_passed = any(kw in final_answer for kw in case["expected_keywords"])
status = "通过" if tool_passed and answer_passed else "失败"
print(f"[{status}] Q: {case['question']}")
print(f" 预期工具: {case['expected_tool']}, 实际工具: {actual_tool}")
print(f" A: {final_answer[:80]}...")
print()
运行:
python 06_eval_agent.py
Agent 评估时至少关注两件事:
- 最终回答是否正确
- 工具调用是否正确
如果回答对了但工具没调,说明模型可能在猜。如果工具调了但回答错了,说明模型没有正确使用工具结果。
十三、案例七:通过 LangSmith 进行评估
以上两个案例都是本地进行评估测试,和 LangSmith 无关。LangSmith 本身也提供了评估能力。
创建 07_langsmith_eval.py:
from dotenv import load_dotenv
from langsmith import Client
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 创建 LangSmith 数据集
client = Client()
# 创建数据集
dataset = client.create_dataset(
dataset_name="rag_eval_dataset",
description="RAG 问答评估数据集",
)
# 添加示例
client.create_examples(
inputs=[
{"question": "每个月可以补卡几次"},
{"question": "退款多久到账"},
{"question": "支持哪些支付方式"},
],
outputs=[
{"answer": "每月可以补卡 3 次"},
{"answer": "退款通常在 1 至 3 个工作日到账"},
{"answer": "支持微信支付、支付宝和银行卡"},
],
dataset_id=dataset.id,
)
# 定义评估函数
def evaluate_answer(run, example):
prediction = run.outputs["output"]
reference = example.outputs["answer"]
# 简单关键词匹配
passed = any(kw in prediction for kw in reference.split())
return {"score": 1 if passed else 0, "comment": f"预测: {prediction}"}
# 运行评估
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-f3c7557e9fc54541802fd638de03bbeb",
base_url="https://api.deepseek.com",
temperature=0.7,
)
prompt = ChatPromptTemplate.from_template("基于公司制度回答问题:{question}")
chain = prompt | model | StrOutputParser()
# 提交评估到 LangSmith
client.run_on_dataset(
dataset_name="rag_eval_dataset",
llm_or_chain_factory=lambda: chain,
evaluation=evaluate_answer,
)
print("评估已提交到 LangSmith,请在平台查看结果。")
运行,查看结果:
python 07_langsmith_eval.py
在 LangSmith 平台可以看到:
- 数据集:包含问题和标准答案
- 评估效果:每个测试用例的评分和对比
十四、综合项目:企业智能客服助手
14.1 项目需求
综合项目把前面知识整合成一个企业智能客服助手。
系统支持两类问题:
- 知识库问题
- 业务查询问题
示例:
| 用户问题 | 处理方式 |
|---|---|
| 每个月可以补卡几次 | RAG 知识库问答 |
| 退款多久到账 | RAG 知识库问答 |
| 订单 A1002 发货了吗 | Agent 调用订单工具 |
| 商品 P2001 还有库存吗 | Agent 调用库存工具 |
| 299 元打八折多少钱 | Agent 调用计算工具 |
14.2 项目结构
customer-service/
├── .env # 环境变量
├── requirements.txt # 依赖
├── model_factory.py # 模型工厂
├── build_index.py # 构建知识库索引
├── rag_service.py # 处理知识库问答
├── business_tools.py # 业务查询工具
├── customer_agent.py # 工具调用 Agent
├── app.py # 终端入口
└── eval_app.py # 测试评估入口
其中:
build_index.py:构建知识库索引rag_service.py:处理知识库问答business_tools.py:业务查询工具customer_agent.py:工具调用 Agentapp.py:终端入口eval_app.py:测试评估入口
14.3 requirements.txt
langchain
langchain-openai
langchain-community
chromadb
sentence-transformers
python-dotenv
安装:
pip install -r requirements.txt
14.4 model_factory.py
from langchain_openai import ChatOpenAI
import os
def get_model():
return ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
temperature=0.7,
)
14.5 business_tools.py
from langchain.tools import tool
@tool
def query_order(order_id: str) -> str:
"""查询订单状态。当用户询问订单相关信息时调用。"""
orders = {
"A1001": "已发货,预计明天到达",
"A1002": "已发货,预计 2 天到达",
"A1003": "处理中,预计 3 天发货",
}
return orders.get(order_id, f"未找到订单 {order_id}")
@tool
def check_stock(product_id: str) -> str:
"""查询商品库存。当用户询问商品库存时调用。"""
stocks = {
"P2001": "库存充足(剩余 500 件)",
"P2002": "库存紧张(剩余 10 件)",
"P2003": "暂时缺货",
}
return stocks.get(product_id, f"未找到商品 {product_id}")
@tool
def calculate_discount(price: float, discount: float) -> str:
"""计算折扣价格。当用户询问打折后的价格时调用。"""
result = price * discount
return f"原价 {price} 元,打 {discount * 10} 折后价格为 {result:.2f} 元"
14.6 customer_agent.py
from langchain.agents import create_agent
from langchain_core.messages import HumanMessage
from model_factory import get_model
from business_tools import query_order, check_stock, calculate_discount
def create_customer_agent():
model = get_model()
tools = [query_order, check_stock, calculate_discount]
agent = create_agent(
model=model,
tools=tools,
system_prompt=(
"你是一个专业的企业客服助手。"
"你可以回答知识库问题(由 RAG 处理),也可以查询订单、库存和计算折扣。"
"回答要简洁友好。"
),
)
return agent
14.7 app.py
from dotenv import load_dotenv
from customer_agent import create_customer_agent
from rag_service import RAGService
from langchain_core.messages import HumanMessage
load_dotenv()
rag = RAGService()
agent = create_customer_agent()
def route_question(question: str):
"""根据关键词做简单路由"""
order_keywords = ["订单", "发货", "物流"]
stock_keywords = ["库存", "商品", "有没有"]
calc_keywords = ["打折", "折扣", "多少钱"]
if any(kw in question for kw in order_keywords):
return "agent"
if any(kw in question for kw in stock_keywords):
return "agent"
if any(kw in question for kw in calc_keywords):
return "agent"
return "rag"
def chat(question: str):
route = route_question(question)
if route == "rag":
answer = rag.ask(question)
return answer
else:
result = agent.invoke({"messages": [HumanMessage(content=question)]})
return result["messages"][-1].content
if __name__ == "__main__":
while True:
question = input("用户:")
if question.lower() in ["exit", "quit", "bye"]:
break
answer = chat(question)
print(f"客服:{answer}\n")
这里使用关键词做简单路由:
def route_question(question: str):
"""根据关键词做简单路由"""
order_keywords = ["订单", "发货", "物流"]
stock_keywords = ["库存", "商品", "有没有"]
calc_keywords = ["打折", "折扣", "多少钱"]
if any(kw in question for kw in order_keywords):
return "agent"
if any(kw in question for kw in stock_keywords):
return "agent"
if any(kw in question for kw in calc_keywords):
return "agent"
return "rag"
这样容易理解。后续可以改成意图分类 Chain,或者在 LangGraph 中做条件路由。
14.8 eval_app.py
from app import chat
# 测试集
test_cases = [
{
"question": "每个月可以补卡几次",
"expected_keywords": ["3", "三次"],
"route": "rag",
},
{
"question": "订单 A1002 发货了吗",
"expected_keywords": ["发货"],
"route": "agent",
},
{
"question": "299 元打八折多少钱",
"expected_keywords": ["239.2"],
"route": "agent",
},
]
# 运行评估
for case in test_cases:
answer = chat(case["question"])
passed = any(kw in answer for kw in case["expected_keywords"])
status = "通过" if passed else "失败"
print(f"[{status}] Q: {case['question']}")
print(f" Route: {case['route']}, A: {answer[:80]}...")
print()
运行评估:
python eval_app.py
十五、综合项目运行顺序
15.1 配置环境变量
.env:
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=lsv2_xxxxxxxxxxxxxx
LANGSMITH_PROJECT=customer-service
DEEPSEEK_API_KEY=sk-f3c7557e9fc54541802fd638de03bbeb
DEEPSEEK_BASE_URL=https://api.deepseek.com
15.2 构建知识库索引
python build_index.py
15.3 启动客服助手
python app.py
15.4 执行评估
python eval_app.py
15.5 查看 LangSmith
在 LangSmith 中查看:
- RAG 调用链路
- Agent 工具调用链路
- 每个测试用例的输入输出
- 错误用例的具体失败位置
十六、上线前检查清单
16.1 Prompt 检查
- 是否明确角色
- 是否限制模型不要编造
- 是否说明资料不足时怎么回答
- 是否避免把检索资料当成系统指令
16.2 RAG 检查
- 文档是否完整
- 文档切分是否合理
- 向量索引是否更新
- 检索结果是否相关
- 答案是否展示来源
16.3 Agent 检查
- 工具描述是否清晰
- 工具参数是否有类型和说明
- 工具内部是否做参数校验
- 高风险操作是否需要人工确认
- 是否能查看工具调用日志
16.4 评估检查
- 是否有固定测试集
- 是否覆盖常见问题
- 是否覆盖资料不足问题
- 是否覆盖工具调用问题
- 是否记录失败案例
16.5 安全检查
- API Key 是否放在
.env .env是否加入.gitignore- 用户输入是否可能造成 Prompt 注入
- 工具是否会执行高风险操作
- 是否记录必要日志
十七、常见问题
17.1 为什么 LangSmith 看不到记录
优先检查:
LANGSMITH_TRACING是否为"true"LANGSMITH_API_KEY是否正确LANGSMITH_PROJECT是否看错项目- 程序是否真的执行了模型调用
- 网络是否可以访问 LangSmith
17.2 是否每次都要开启 LangSmith
开发和调试阶段建议开启。
生产环境可以根据公司要求决定是否开启、采样或脱敏。
如果涉及用户隐私或敏感业务数据,需要先确认合规要求。
17.3 LangSmith 会记录 Prompt 和输入吗
会记录调用链路中的输入、输出和 Prompt 等信息。
所以涉及敏感数据时,要考虑脱敏、权限和合规。
17.4 关键词评估靠谱吗
关键词评估简单直观,适合作为入门。
但它不能覆盖所有情况。例如答案意思正确,但没有使用预期关键词,就可能被误判失败。
后续可以增加人工评分或大模型评分。
17.5 为什么综合项目路由用关键词
关键词路由简单、可解释,适合课堂演示。
后续可以改成:
- 意图分类 Chain
- Agent 自主选择
- LangGraph 条件路由
十八、本章重点
本章需要重点掌握:
- LangSmith 用于观察、调试和评估大模型应用
- 开启追踪需要配置
LANGSMITH_TRACING和LANGSMITH_API_KEY LANGSMITH_PROJECT可以区分不同项目config可以设置run_name、tags和metadata- RAG 调试要重点看检索结果和最终上下文
- Agent 调试要重点看工具调用和工具返回结果
- 简单测试集可以作为评估 harness
- 综合项目可以把 RAG 和 Agent 组合起来
- 上线前要检查 Prompt、RAG、Agent、评估和安全
如果觉得这篇文章对你有帮助,欢迎点赞收藏。你在使用 LangSmith 调试时遇到了什么问题?评论区交流。
更多推荐

所有评论(0)