如何处理查询分析中未生成查询的情况

如何处理查询分析中未生成查询的情况

在使用查询分析技术时,有时会出现不生成任何查询的情况。本文将探讨如何在这种情况下调整整个流程,以决定是否调用检索器。我们将使用一些模拟数据来进行演示。

引言

在处理自然语言查询时,生成的结果可能并不总是需要进一步的检索。本文旨在介绍一种处理未生成查询情况的方法,确保系统能够有效地决定何时调用检索器。

主要内容

环境设置

安装依赖

首先,确保安装了必要的依赖项:

# %pip install -qU langchain langchain-community langchain-openai langchain-chroma
设置环境变量

我们将使用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()

创建索引

我们将在一些模拟信息上创建一个向量存储。

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

texts = ["Harrison worked at Kensho"]
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_texts(
    texts,
    embeddings,
)
retriever = vectorstore.as_retriever()

查询分析

使用函数调用来结构化输出,并配置LLM,使其不一定要发出查询请求。

from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

class Search(BaseModel):
    query: str = Field(
        ...,
        description="Similarity search query applied to job record.",
    )

system = """You have the ability to issue search queries to get information to help answer user information.
You do not NEED to look things up. If you don't need to, then just respond normally."""
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system),
        ("human", "{question}"),
    ]
)
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
structured_llm = llm.bind_tools([Search])
query_analyzer = {"question": RunnablePassthrough()} | prompt | structured_llm

通过调用上面的代码,可以看到有时返回工具调用,有时不需要。

response1 = query_analyzer.invoke("where did Harrison Work")
response2 = query_analyzer.invoke("hi!")

代码示例

使用查询分析进行检索

下面是如何将其包含在链中的示例:

from langchain_core.output_parsers.openai_tools import PydanticToolsParser
from langchain_core.runnables import chain

output_parser = PydanticToolsParser(tools=[Search])

@chain
def custom_chain(question):
    response = query_analyzer.invoke(question)
    if "tool_calls" in response.additional_kwargs:
        query = output_parser.invoke(response)
        docs = retriever.invoke(query[0].query)  # 使用API代理服务提高访问稳定性
        return docs
    else:
        return response

result1 = custom_chain.invoke("where did Harrison Work")
result2 = custom_chain.invoke("hi!")

常见问题和解决方案

  • 查询未生成:确保提示明确定义了何时需要查询。适当调整提示信息可能会有所帮助。
  • API访问限制:由于某些地区的网络限制,开发者可能需要使用API代理服务。

总结和进一步学习资源

有效处理查询分析中未生成查询的情况,可以提高系统的响应效率。可以参考以下资源进行深入学习:

参考资料

  • LangChain API Documentation
  • OpenAI API指南

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值