Skip to content

用法模式#

入门指南#

从索引构建一个聊天引擎:

chat_engine = index.as_chat_engine()

提示

要了解如何构建索引,请参阅Indexing

与数据进行对话:

response = chat_engine.chat("告诉我一个笑话。")

重置聊天历史以开始新对话:

chat_engine.reset()

进入交互式聊天 REPL:

chat_engine.chat_repl()

配置聊天引擎#

配置聊天引擎与配置查询引擎非常相似。

高级 API#

您可以直接从索引中构建和配置一个聊天引擎,只需一行代码:

chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True)

注意:您可以通过指定 chat_mode 作为关键字参数来访问不同的聊天引擎。condense_question 对应于 CondenseQuestionChatEnginereact 对应于 ReActChatEnginecontext 对应于 ContextChatEngine

注意:虽然高级 API 优化了易用性,但它并没有暴露完整的可配置范围。

可用的聊天模式#

  • best - 将查询引擎转换为工具,用于与 ReAct 数据代理或 OpenAI 数据代理一起使用,具体取决于您的 LLM 支持的内容。OpenAI 数据代理需要 gpt-3.5-turbogpt-4,因为它们使用了 OpenAI 的函数调用 API。
  • condense_question - 查看聊天历史并重写用户消息,使其成为索引的查询。在从查询引擎读取响应后返回响应。
  • context - 使用每个用户消息从索引中检索节点。检索到的文本被插入到系统提示中,以便聊天引擎可以自然地回复或使用查询引擎的上下文。
  • condense_plus_context - condense_questioncontext 的组合。查看聊天历史并重写用户消息,使其成为索引的检索查询。检索到的文本被插入到系统提示中,以便聊天引擎可以自然地回复或使用查询引擎的上下文。
  • simple - 与 LLM 直接进行简单的聊天,不涉及查询引擎。
  • react - 与 best 相同,但强制使用 ReAct 数据代理。
  • openai - 与 best 相同,但强制使用 OpenAI 数据代理。

低级组合 API#

如果您需要更精细的控制,可以使用低级组合 API。具体来说,您将显式构建 ChatEngine 对象,而不是调用 index.as_chat_engine(...)

注意:您可能需要查看 API 参考或示例笔记本。

以下是一个示例,我们在其中进行了以下配置:

  • 配置了压缩问题提示,
  • 使用一些现有历史记录初始化了对话,
  • 打印了详细的调试消息。
from llama_index.core import PromptTemplate
from llama_index.core.llms import ChatMessage, MessageRole
from llama_index.core.chat_engine import CondenseQuestionChatEngine

custom_prompt = PromptTemplate(
    """\
给定一段对话(人类和助手之间)以及人类的后续消息,重写消息以成为一个独立的问题,其中包含对话的所有相关上下文。

<聊天历史>
{chat_history}

<后续消息>
{question}

<独立问题>
"""
)

# `ChatMessage` 对象列表
custom_chat_history = [
    ChatMessage(
        role=MessageRole.USER,
        content="你好助手,今天我们正在对保罗·格雷厄姆进行深入讨论。",
    ),
    ChatMessage(role=MessageRole.ASSISTANT, content="好的,听起来不错。"),
]

query_engine = index.as_query_engine()
chat_engine = CondenseQuestionChatEngine.from_defaults(
    query_engine=query_engine,
    condense_question_prompt=custom_prompt,
    chat_history=custom_chat_history,
    verbose=True,
)

流式处理#

要启用流式处理,您只需调用 stream_chat 端点,而不是 chat 端点。

警告

这与查询引擎有些不一致(在那里您传递了一个 streaming=True 标志)。我们正在努力使行为更加一致!

chat_engine = index.as_chat_engine()
streaming_response = chat_engine.stream_chat("告诉我一个笑话。")
for token in streaming_response.response_gen:
    print(token, end="")

查看端到端教程