构建智能聊天机器人:从基础到进阶
1. 引入聊天历史功能的必要性
在开发聊天机器人时,我们发现当前的聊天代理缺乏对历史对话的感知,每个消息都被独立处理。例如,当用户先询问 “who is Hemingway?”,之后再问 “what is his best book?” 时,机器人无法从上下文推断出 “his” 指的是 Hemingway,而是要求用户提供更多上下文信息。
为了解决这个问题,我们需要添加聊天历史功能,让机器人能够在对话过程中保留和利用之前的信息,从而实现更自然、连贯的对话。
2. 实现聊天历史功能的挑战与解决方案
2.1 Writer 单子的局限性
一开始,我们考虑使用 Writer 单子来自动构建聊天历史。具体做法是给 RWST 变换器传入 [Message] 而不是 [String] 。然而,Writer 单子只有在通过 runRWST / evalRWST 等方法运行单子操作后,才能访问 “日志” 幺半群中的内容,而我们只在程序的顶层执行这些操作。此外,如果将每次与大语言模型(LLM)API 的交互都视为一个 Writer 操作,还需要在状态中保存中间消息数组,这会使代码变得复杂。
2.2 引入可调参数
由于 LLM 能够处理的上下文有限,且使用代币需要付费,我们需要引入一个可调参数,即每次用户请求时发送给 LLM 的历史消息数量。
2.3 更新 AppState 数据类型
为了实现上述功能,我们更新了 <
超级会员免费看
订阅专栏 解锁全文
678

被折叠的 条评论
为什么被折叠?



