LangSmith 是 LangChain 提供的 AI 应用开发监测平台,我们可以用它来观察调用链的运行情况。它提供了一系列功能,包括模型调优、数据集管理和结果分析,使用户能够快速迭代并改进其语言模型的性能。

LangSmith 还支持与多种流行的深度学习框架集成,简化了模型开发的工作流程,适用于各种 NLP 任务,如文本生成、情感分析和问答系统等。使用 LangSmith,我们可以用它来观察调用链的运行情况,包括模型调优、提示词管理和结果分析。

1、注册 LangSmith 与记录运行日志

要使用 LangSmith,你需要在 LangSmith 官网 LangSmith 注册账号,如下所示,点击按钮生成 LangChain API KEY

然后按照官网提示设置以下4个环境变量

import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "<your-api-key>"
os.environ["LANGSMITH_ENDPOINT"]="https://api.smith.langchain.com"
os.environ["LANGCHAIN_PROJECT"] = "test_01"

from langchain_community.chat_models import ChatTongyi
from langchain.callbacks import tracing_v2_enabled
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

with tracing_v2_enabled(project_name="test_01"):
    # 1. 创建提示词模版
    system_template = "Translate the following into {language}:"
    prompt_template = ChatPromptTemplate.from_messages([
        ('system', system_template),
        ('user', '{text}')
    ])
    #2.创建大模型
    llm = ChatTongyi(model='qwen-long',
                    top_p=0.8,
                    temperature=0.1,
                    api_key='sk-******')
    #3.创建解析器
    parser = StrOutputParser()
    #4.创建链
    chain = prompt_template | llm | parser  
    #5.调用链
    chain.invoke({"language": "Chinese", "text": "你好,世界!"})

运行以上程序,这时,在 LangSmith 的 Projects 中,我们即可以看到自己设置的 "test1" 项目,并查看它的运行日志。

点击可以查看具体的运行结果,在这里可以看到输入与输出。

2、记录运行日志链路

我们运行如下调用模型的调用链,然后在 LangSmith 查看日志

import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "<your-api-key>"
os.environ["LANGSMITH_ENDPOINT"]="https://api.smith.langchain.com"
os.environ["LANGCHAIN_PROJECT"] = "test_langchain123"

from langchain.callbacks import tracing_v2_enabled
from typing import Literal #特殊的类型注解
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import END,StateGraph,MessagesState
#导入工具节点
from langgraph.prebuilt import ToolNode
from langchain_core.utils.function_calling import convert_to_openai_tool
from langchain_openai import ChatOpenAI

with tracing_v2_enabled(project_name="test_langchain123"):
    model = ChatOpenAI(model="deepseek-chat",
                    api_key="sk-******",
                    base_url="https://api.deepseek.com",
                    temperature=1.3)
    #自定义工具
    @tool
    def custom_search(query: str):
        """搜索全国各地的天气的工具"""
        if "成都" in query.lower() or "chengdu" in query.lower():
            return "现在30度,晴"
        return "现在20度,阴"
    #将工具函数放入工具列表中
    tools =[custom_search]
    #创建工具节点
    tool_node = ToolNode(tools)
    #把工具和模型绑定到一起
    model = model.bind_tools(tools)
    #定义路由函数,决定是否继续执行
    def should_continue(state: MessagesState) ->Literal['tools',END]:
        messages = state['messages']
        last_message = messages[-1]
        #如果llm调用了工具
        if last_message.tool_calls:
            return "tools"
        return END
    #定义函数调用大模型
    def call_model(state: MessagesState):
        messages = state['messages']
        res = model.invoke(messages)
        #把llm的回答内容添加到消息列表中
        return {"messages":[res]}

    workflow = StateGraph(MessagesState)
    workflow.add_node("agent",call_model)
    workflow.add_node("tools",tool_node)
    #设置图的入口节点
    workflow.set_entry_point("agent")
    #添加条件边
    workflow.add_conditional_edges("agent",should_continue,['tools',END])
    #添加从tools到agent 的普通边
    #调完tools之后,接下来调用agent节点
    workflow.add_edge("tools","agent")

    memory = MemorySaver()
    #编译图
    graph = workflow.compile(checkpointer=memory)
    msg = {'messages':[HumanMessage(content="今天成都的天气怎么样?")]}
    #执行图
    result = graph.invoke(msg,config={"configurable":{"thread_id":123}})
    print(result)
    print(result['messages'][-1].content)
    

我们可以看到调用链的每个节点都会进行详细记录,这就很方便我们进行问题的追踪和定位。

3、进行提示语管理

LangSmith 为我们提供一个方便的功能 LangSmith Hub,我们可以用它来调试提示语。具体来说,它提供实用功能:

  • 编辑提示语及提示语版本
  • 在应用中加载提示语
  • 与他人共享提示语

如下所示,创建一个名称为 test_1 的提示词模版,然后权限设置为 private,仅我们自己可以使用。

from langchain_core.output_parsers import StrOutputParser
from langchain_community.chat_models import ChatTongyi
from langchain import hub

# 1. 获取提示词模版
prompt_template = hub.pull("test1")

# 2. 创建模型
model = ChatTongyi(model='qwen-long',
                  top_p=0.8,
                  temperature=0.1,
                  api_key='sk-******')

# 3. 创建解析器
parser = StrOutputParser()

# 4. 创建链
chain = prompt_template | model | parser

# 5、调用链
chain.invoke({"question": "你好"})

查看在线开源的提示词

方式一:调用时输入关键词即可

from langchain import hub

prompt_template = hub.pull("hardkothari/prompt-maker")

print(prompt_template.invoke({"lazy_prompt":"hello","task":"test"}))

messages=[SystemMessage(content='You are an expert Prompt Writer for Large Language Models.\n\n', additional_kwargs={}, response_metadata={}), HumanMessage(content='Your goal is to improve the prompt given below for test :\n--------------------\n\nPrompt: hello\n\n--------------------\n\nHere ...]

方式二

# Create a LANGSMITH_API_KEY in Settings > API Keys
from langsmith import Client
client = Client(api_key="<your-api-key>")
prompt = client.pull_prompt("hardkothari/prompt-maker", include_model=True)
prompt

ChatPromptTemplate(input_variables=['lazy_prompt', 'task'], input_types={}, partial_variables={}, metadata={'lc_hub_owner': 'hardkothari', 'lc_hub_repo': 'prompt-maker', 'lc_hub_commit_hash': 'c5db8eeefa7be4862a9599b759608dd10ee53f53910838f69abb5ab31c257c2d'}, messages=[SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], input_types={}, partial_variables={}, template='You are an expert Prompt Writer for Large Language Models.\n\n'), additional_kwargs={}), HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['lazy_prompt', 'task'], input_types={}, partial_variables={}, template='Your goal is to improve the prompt given below for {task} :\n--------------------\n\nPrompt: {lazy_prompt}\n\n--------------------\n\nHere ...])

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐