构建LangChain应用程序的示例代码:54、如何使用`DialogueAgent`和`DialogueSimulator`类来扩展两人《龙与地下城》示例到多人游戏

本示例展示了DialogueAgentDialogueSimulator类如何轻松地将两人《龙与地下城》示例扩展到多个玩家。

模拟两个玩家和多个玩家之间的主要区别在于修改每个代理发言的调度方式。

为此,我们增强了DialogueSimulator以接受一个自定义函数,该函数决定哪个代理发言的调度。在下面的示例中,每个角色以轮询方式发言,讲述者在每个玩家之间穿插。

导入LangChain相关模块

from typing import Callable, List

from langchain.schema import (
    HumanMessage,
    SystemMessage,
)
from langchain_openai import ChatOpenAI

# 导入必要的模块和类
# typing用于类型提示
# langchain.schema中导入消息类型
# langchain_openai导入ChatOpenAI模型

DialogueAgent

DialogueAgent类是ChatOpenAI模型的一个简单包装器,它从dialogue_agent的角度存储消息历史,只需将消息作为字符串连接起来。

它暴露了两个方法:

  • send(): 将chatmodel应用于消息历史并返回消息字符串
  • receive(name, message): 将name说的message添加到消息历史中
class DialogueAgent:
    def __init__(
        self,
        name: str,
        system_message: SystemMessage,
        model: ChatOpenAI,
    ) -> None:
        self.name = name
        self.system_message = system_message
        self.model = model
        self.prefix = f"{
     
     self.name}: "
        self.reset()

    def reset(self):
        self.message_history = ["Here is the conversation so far."]

    def send(self) -> str:
        """
        将chatmodel应用于消息历史并返回消息字符串
        """
        message = self.model.invoke(
            [
                self.system_message,
                HumanMessage(content="\n".join(self.message_history + [self.prefix])),
            ]
        )
        return message.content

    def receive(self, name: str, message: str) -> None:
        """
        将{name}说的{message}连接到消息历史中
        """
        self.message_history.append(f"{
     
     name}: {
     
     message}")

# DialogueAgent类定义
# 初始化方法设置代理的名称、系统消息和模型
# reset方法重置消息历史
# send方法生成新消息
# receive方法接收其他代理的消息

DialogueSimulator

DialogueSimulator类接受一个代理列表。在每一步中,它执行以下操作:

  1. 选择下一个发言者
  2. 调用下一个发言者发送消息
  3. 将消息广播给所有其他代理
  4. 更新步骤计数器。
    下一个发言者的选择可以实现为任何函数,但在这种情况下,我们只是简单地循环遍历代理。
class DialogueSimulator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值