提升查询分析性能:如何为LangChain查询分析器添加示例

51 阅读3分钟

引言

在使用大语言模型(LLM)进行复杂的查询分析时,模型可能难以确定如何在某些场景下给予准确的响应。为此,我们可以通过在提示中添加示例来提高模型的性能。本篇文章将展示如何为已经构建的LangChain YouTube视频查询分析器添加示例,以提升其分析能力。

主要内容

环境设置

安装依赖

首先,安装LangChain相关库:

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

设置环境变量

我们以OpenAI为例,设置API连接所需的环境变量:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass() # 输入API密钥

# 可选, 开启LangSmith追踪以分析运行情况:
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

查询模式定义

我们将定义一个查询模式,允许模型生成包含子查询的复杂查询:

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="视频发布年份")

查询生成

我们将为系统提供一个基础提示,并设置LangChain的运行环境:

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]})

# 更多示例...

总结和进一步学习资源

通过在提示中添加示例,我们可以引导LLM更有效地生成复杂查询。调整和优化示例集可以进一步提升查询分析效果。

参考资料

  1. LangChain 官方文档
  2. OpenAI API 文档

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