类功能
函数原型
from mx_rag.chain import SingleText2TextChain SingleText2TextChain(llm, retriever, reranker, prompt, sys_messages, source, user_content_builder)
参数说明
参数名 |
数据类型 |
可选/必选 |
说明 |
|---|---|---|---|
llm |
Text2TextLLM |
必选 |
大模型对象,具体可参见Text2TextLLM。 |
retriever |
Retriever |
必选 |
Retriever对象,具体可参见Retriever。 |
reranker |
Reranker |
可选 |
Reranker对象,实现对检索的文档进行精排,默认为“None”,具体可参见Reranker。 |
prompt |
str |
可选 |
添加知识检索内容同时可以添加系统prompt,对大模型进行更精确的控制,默认值是:"根据上述已知信息,简洁和专业地回答用户的问题。如果无法从已知信息中得到答案,请根据自身经验做出回答"。如果用户需要自定义prompt,请参考大模型的提示词工程增加。 长度取值范围:[1, 1024*1024] |
sys_messages |
List[dict] |
可选 |
系统消息,默认值为“None”,列表最大长度为16,列表每个字典长度最大为16,字典key字符串长度最大为“16”,value字符串最大长度为4 * 1024* 1024,参考格式:[{"role": "system", "content": "你是一个友好助手" }] |
source |
bool |
可选 |
在对话过程中,是否返回检索到的相关文档,Chain返回字典中key值为source_documents,默认为“True”。 |
user_content_builder |
Callable |
可选 |
回调函数,返回值必须为字符串且长度最大为4*1024*1024,默认函数为_user_content_builder,功能是整合「原始问题、检索到的文档列表、用户提示词」这三类信息,生成可直接作为大模型对话中 user 角色消息 content 字段的文本(即 {"role": "user", "content": 生成结果})。 |
def _user_content_builder(query: str, docs: List[Document], prompt: str) -> str:
"""
默认的用户输入拼接逻辑。
参数说明:
----------
query : str
用户原始提问内容。
例如:“请根据以下材料总结关键要点。”
docs : List[Document]
从检索器(retriever)返回的文档对象列表。
每个 Document 通常包含:
- page_content:文档内容文本;
- metadata:元信息(如来源、标题、分数等)。
prompt : str
系统提示词。默认为"根据上述已知信息,简洁和专业地回答用户的问题。
如果无法从已知信息中得到答案,请根据自身经验做出回答"
返回:
-----
str : 拼接后的完整 prompt 文本,作为大模型输入内容。
"""
final_prompt = ""
document_separator: str = "\n\n"
if len(docs) != 0:
if prompt != "":
last_doc = docs[-1]
last_doc.page_content = (last_doc.page_content
+ f"{document_separator}{prompt}")
docs[-1] = last_doc
final_prompt = document_separator.join(x.page_content for x in docs)
if final_prompt != "":
final_prompt += document_separator
final_prompt += query
return final_prompt