You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义ConversationalRetrievalChain与智能体结合?

自定义Conversational Retrieval Agent实现方案

要在保留你现有question_generator_chain和qa_chain的前提下,让智能体自主决定是否执行检索操作,核心思路是把你已定义好的ConversationalRetrievalChain包装成Agent可调用的工具,再通过自定义Prompt引导Agent判断何时触发检索。以下是具体实现步骤:

1. 将现有ConversationalRetrievalChain包装为Tool

首先把你的convR_qa转换成LangChain的Tool,让Agent能识别并调用它:

from langchain.tools import Tool

# 定义工具函数,接收用户问题和对话历史,调用你的检索链
def retrieval_tool(inputs):
    # inputs为字典,包含"question"和"chat_history"字段
    result = convR_qa({
        "question": inputs["question"],
        "chat_history": inputs["chat_history"]
    })
    # 返回格式化结果,包含回答和来源文档摘要
    return f"检索回答:{result['answer']}\n来源文档摘要:{[doc.page_content[:100] + '...' for doc in result['source_documents']]}"

# 创建工具实例,明确工具适用场景
retrieval_tool_instance = Tool(
    name="知识库检索工具",
    func=retrieval_tool,
    description="仅当用户问题需要从指定知识库获取专属信息时调用,比如产品细节、内部文档内容;一般性闲聊、常识问题无需调用。"
)

2. 配置Agent的Prompt与初始化

使用ChatAgent结合你的工具和现有memory,通过自定义Prompt引导Agent的决策逻辑:

from langchain.agents import AgentExecutor, ChatAgent
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chat_models import ChatOpenAI

# 定义Agent Prompt模板,明确决策规则
prompt = ChatPromptTemplate.from_messages([
    ("system", "你需要根据用户问题判断是否调用知识库检索工具:无需专属信息的问题直接回答,需要则调用工具。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

# 创建Agent实例
agent = ChatAgent.from_llm_and_tools(
    llm=ChatOpenAI(temperature=0),  # 替换为你使用的LLM
    tools=[retrieval_tool_instance],
    prompt=prompt
)

# 初始化Agent执行器,复用你已有的memory
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent,
    tools=[retrieval_tool_instance],
    memory=memory,
    verbose=True
)

3. 测试Agent运行

现在可以通过Agent处理用户问题,它会自主判断是否触发检索:

# 测试需要检索的问题
response = agent_executor.run(input="请说明我们产品的API认证流程?")
print(response)

# 测试无需检索的问题
response = agent_executor.run(input="你好,帮我推荐一部科幻电影?")
print(response)

关键说明

  • 你的question_generator_chain和qa_chain完全保留在convR_qa中,Agent仅通过工具调用复用该链,不会修改原有组件逻辑。
  • 可通过调整Tool的description字段,更精准地限定工具调用场景,提升Agent决策准确性。
  • 若需更复杂的决策逻辑,可扩展Prompt内容或使用ZeroShotAgent等自定义Agent类优化判断规则。

内容的提问来源于stack exchange,提问作者Cehao Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:04:51