【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

相关推荐
牧子川13 小时前
009-Transformer-Architecture
人工智能·深度学习·transformer
covco13 小时前
矩阵管理系统指南:拆解星链引擎的架构设计与全链路落地实践
大数据·人工智能·矩阵
沪漂阿龙13 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
lifewange13 小时前
AI编写测试用例工具介绍
人工智能·测试用例
陕西字符13 小时前
2026 西安 豆包获客优化技术深度解析:企来客科技 AI 全域获客系统测评
大数据·人工智能
掘金安东尼13 小时前
GGUF、GPTQ、AWQ、EXL2、MLX、VMLX...运行大模型,为什么会有这么多格式?
人工智能
新知图书13 小时前
市场分析报告自动化生成(使用千问)
人工智能·ai助手·千问·高效办公
无心水13 小时前
【Hermes:安全、权限与生产环境】38、Hermes Agent 安全四层纵深:最小权限原则从理论到落地的完全指南
人工智能·安全·mcp协议·openclaw·养龙虾·hermes·honcho
旦莫14 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
dfsj6601114 小时前
第四章:深度学习革命
人工智能·深度学习