如何配置 `gr.ChatInterface` 以返回多个输出(响应和源文档)?

1 投票
1 回答
59 浏览
提问于 2025-04-14 17:46

我有一个 gr.ChatInterface,我想调整一下,让它也能显示给用户在获取信息时用到的文档来源(也就是说,增加一个输出)。

import gradio as gr

def generate_response(message, history):   
    print(f"\n\n[message] {message}")
    # call LLM & generate response
    return response.answer


demo = gr.ChatInterface(
    fn=generate_response,
    title="RAG app for Q&A",
    description="Ask any question about Stuff",
).queue(default_concurrency_limit=2, max_size=10)

demo.launch(share=True)
    

我已经尝试过 outputs,但是 gr.ChatInterface 不支持这个:

Traceback (most recent call last):
  File "/workspaces/aider_repos/app.py", line 20, in <module>
    demo = gr.ChatInterface(
           ^^^^^^^^^^^^^^^^^
TypeError: ChatInterface.__init__() got an unexpected keyword argument 'outputs'

怎么配置 gr.ChatInterface 让它返回多个输出(回复和来源文档)呢?

Traceback (most recent call last):
  File "/workspaces/aider_repos/app.py", line 20, in <module>
    demo = gr.ChatInterface(
           ^^^^^^^^^^^^^^^^^
TypeError: ChatInterface.__init__() got an unexpected keyword argument 'outputs'

1 个回答

-1

Gradio中的gr.ChatInterface并不直接支持多个输出。不过,我们可以通过创建一个自定义组件,把响应和源文档合并成一个输出字符串,来实现这个功能。

下面是我们如何修改代码,以便同时返回响应和源文档的示例。

import gradio as gr

def generate_response(message, history):
print(f"\n\n[message] {message}")
# Call LLM & generate response 
response_text = "This is the generated response."
source_documents = ["Source document 1", "Source document 2"]
return response_text, source_documents

def chatbot(input_message, history):
response, sources = generate_response(input_message, history)
combined_output = f"Response: {response}\n\nSource documents:\n\n" + "\n".join(sources)
history = history + [(input_message, combined_output)]
return history, history

demo = gr.ChatInterface(
fn=chatbot,
title="RAG app for Q&A", 
description="Ask any question about Stuff",
).queue(default_concurrency_limit=2, max_size=10)

demo.launch(share=True)

撰写回答