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

如何利用Langchain Conversational Retrieval Agent生成含参考来源的最终答案

使用Langchain Conversational Retrieval Agent生成带参考来源的答案

核心思路

要实现带参考来源的输出,关键是让工具本身生成包含答案+来源的结果,同时明确引导Agent完整保留这些来源信息,而非依赖Agent的格式设置。

具体实现步骤

1. 构建带来源输出的QA链

直接用create_qa_with_sources_chain创建原生支持输出答案和对应来源的链,这个链会返回包含answer和sources字段的结构化结果:

from langchain.chains.qa_with_sources import create_qa_with_sources_chain
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(temperature=0)
qa_chain = create_qa_with_sources_chain(llm)

2. 将QA链包装为Agent可调用的工具

把上述QA链封装成工具,重点在工具描述里明确告知Agent:该工具返回的结果包含答案和来源,必须完整整合到最终回复中:

from langchain.tools import Tool

qa_tool = Tool(
    name="QA_with_sources",
    func=lambda query: qa_chain({
        "input_documents": retriever.get_relevant_documents(query), 
        "question": query
    }),
    description="用于回答问题,返回结果包含答案内容和对应的参考来源,必须完整保留来源信息返回给用户"
)

3. 初始化Conversational Retrieval Agent

初始化Agent时传入自定义的QA工具,同时用对话记忆维护上下文:

from langchain.agents import initialize_agent, AgentType
from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent = initialize_agent(
    [qa_tool],
    llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    memory=memory,
    verbose=True
)

4. 调用Agent获取带来源的答案

直接调用Agent,结果会自然包含答案和对应的参考来源:

result = agent.run("你的具体问题")
print(result)

关键注意事项

  • 避免直接用检索器当工具:检索器仅返回原始文档,Agent不会自动处理成带来源的结构化答案,必须先通过QA链加工。
  • 工具描述要精准:必须在description里明确要求Agent保留来源信息,否则它可能只提取答案忽略来源。
  • 自定义提示词(可选):如果默认提示词效果不佳,可修改Agent的提示模板,在最终回复要求里强制加上“请在答案末尾列出所有参考来源”。

内容的提问来源于stack exchange,提问作者Elijahol Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:06:07