【AI-Agent】LangSmith 使用之Prompt(二)

目录

前置文章

【AI-Agent】LangSmith 使用之Tracing

上一节介绍到 LangSmith 的功能中有一个是提示词工程与管理 (Prompt Engineering),这一节重点记录下它。

一、LangSmith的提示词工程与管理

1、Playground 选项卡

从上一个Tracing中我们直接把prompt导入到playground选项卡中,在playground中进行prompt的调试和管理

在这里可以调试prompt,可以使用不同厂商和模型测试不同的prompt对响应,在这找到最佳平衡(但是需要API key)

可选厂商和模型调用

prompt调试里面支持使用变量,可以在运行的时候填写变量信息动态生成prompt,这样也可以避免变量硬编码在项目代码中,变量使用"{}"声明。

复制代码
Answer the users question using only the provided information below:
 
    Harrison worked at {country} 

prompt调试修改好后可以直接保存到 prompt hub,同时会记录在 Prompts 选项卡中

2、Prompts 选项卡

prompt保存在prompt hub后,支持代码引入动态加载提示词到项目代码中,这样就避免了在代码中硬编码prompt。调用方式会展示样例

如果是使用特定版本的prompt,需要指定prompt的哈希

3、完整测试详解

测试:从 prompt hub上动态拉取prompt进行AI应用开发(不在代码中硬编码prompt)

复制代码
远端 prompt,有一个country变量:
Answer the users question using only the provided information below:
    
    Harrison worked at {country} 

from openai import OpenAI
from langsmith import traceable, Client
from langsmith.wrappers import wrap_openai
import os

# 1. 环境变量配置 (LangSmith 追踪核心开关)
os.environ["LANGSMITH_TRACING"] = "true"  # 启用 LangSmith 全局追踪功能
os.environ["LANGCHAIN_API_KEY"] = "xxx"  # LangSmith 平台 API Key,用于将追踪数据上报到你的账号
# 可选:设置项目名称,如果不设置默认会记录到 "default" 项目中
os.environ["LANGSMITH_PROJECT"] = "My first App" 

# 2. 初始化客户端 (LangSmith & 大模型)
# 初始化 LangSmith 客户端,用于拉取 Prompt 等操作
langsmith_client = Client()

# 使用 wrap_openai 包装原生的 OpenAI 客户端,这样所有的 LLM 调用都会被自动记录(包括 Prompt、耗时、Token 等)
openai_client = wrap_openai(
    OpenAI(
        api_key="API key", # API key
        base_url="https://open.bigmodel.cn/api/paas/v4/chat/completions" # 智谱地址
    )
)

# 3. 定义业务逻辑 (使用 @traceable 装饰器)
# @traceable 装饰器会将这个函数标记为一个 "Span" (追踪跨度)
# 在 LangSmith 后台,你能看到这个函数的输入(query)和输出(results)
@traceable(name="Mock Retriever") # 可以自定义在 LangSmith 中显示的节点名称
def retriever(query: str):
    """模拟一个文档检索器 (例如从向量数据库中查询)"""
    # 远端 Prompt 变成了 "Harrison worked at {country}"
    results = ["China"]  # 这里是RAG的内容模拟,修改这里看大模型回复结果
    return results

# 这个函数是整个 RAG 流程的入口,它也会作为一个父级 Span
# 它的内部调用了 retriever 和 openai_client,在 LangSmith 中会形成树状的层级结构 (Trace Tree)
@traceable(name="RAG Pipeline")
def rag(question):
    """完整的 RAG (检索增强生成) 流程"""
    # 步骤 1: 追踪检索步骤
    docs = retriever(question)
    # 假设检索器返回的是国家名称列表,我们取第一个
    country_name = docs[0] if docs else "Unknown"
    
    # 步骤 2: 从 LangSmith 动态拉取 Prompt
    # 这里拉取你在 LangSmith Hub 上创建的 "test_prompt"
    prompt_template = langsmith_client.pull_prompt("test_prompt")
    
    # 格式化 Prompt (根据你的 test_prompt,现在只定义了 {country} 变量)
    # format_messages 会返回 LangChain 的 Message 对象列表
    # 注意:如果你的 Prompt 模板里还有 {question} 变量,请在这里加上 question=question
    formatted_messages = prompt_template.format_messages(country=country_name)
    
    # 将 LangChain 的 Message 格式转换为原生 OpenAI 需要的 dict 格式
    openai_messages = []
    for msg in formatted_messages:
        # LangChain 中的 "human" 对应 OpenAI 的 "user"
        role = "user" if msg.type == "human" else msg.type
        openai_messages.append({"role": role, "content": msg.content})
        
    # 【关键补充】 test_prompt 只是一个 System 提示词,没有包含用户的提问
    # 我们需要手动把用户的 question 作为 user 角色追加进去,否则大模型不知道你要问什么
    has_user_msg = any(m["role"] == "user" for m in openai_messages)
    if not has_user_msg:
        openai_messages.append({"role": "user", "content": question})
    
    # 步骤 3: 追踪 LLM 调用步骤
    return openai_client.chat.completions.create(
        messages=openai_messages,
        model="gpt-3.5-turbo", # 指定调用的模型名称,需确保网关支持该模型
    )

# 4. 执行主程序
if __name__ == "__main__":
    # 整个应用程序流程将被追踪,并上报到 LangSmith
    print("开始执行 RAG 流程...")
    response = rag("where did harrison work")
    print("\n大模型回复结果:")
    print(response.choices[0].message.content)

本地运行结果,可以看到已经回复:China 了,说明prompt生效了

追踪一下大模型的输入输出,发现已经拼接好了新的prompt

大模型回复

二、小结

  • Prompt Engineering 支持对prompt的工程和管理,可轻松实现对prompt的打磨和调用
  • 同时可以实现prompt的动态加载和拼接,避免了prompt泄露
  • prompt hub上海量的提示词的价值会被放大

by 久违 2026.4.22

相关推荐
BU摆烂会噶2 小时前
【LangGraph】实战:基于 LangGraph 实现的智能文档问答系统
人工智能·python·langchain
AI算法沐枫2 小时前
计算机视觉需要哪些数学基础?常见问题全解析
人工智能·深度学习·线性代数·计算机视觉·自然语言处理
xiaotao1312 小时前
03-深度学习基础:RAG检索增强生成
人工智能·深度学习·rag·检索增强生成
AC赳赳老秦2 小时前
OpenClaw界面错乱、闪退问题,一键修复教程(附工具)
人工智能·python·职场和发展·django·tornado·deepseek·openclaw
javaDocker2 小时前
AI驱动开发:从原型到工业级项目的全流程实践-Calicat+Claude Code,打通日志分析平台全流程开发
人工智能·一人成军
恋猫de小郭2 小时前
为什么 Github Copilot 要收集你数据,也是 AI 订阅以前便宜的原因
前端·人工智能·ai编程
EasyGBS2 小时前
AIServer插件运行正常却无告警?国标GB28181视频平台EasyGBS告警异常原因解析
人工智能
庚昀◟2 小时前
基于 LangChain、RAG、LoRA 、Streamlit 的知识库问答客服系统从零到一(附项目源码)
人工智能·langchain·milvus
大黄烽2 小时前
IDEA中集成AI 工具CodeBuddy和Trae区别和选型
java·人工智能·intellij-idea