使用OpenAI Agents实现动态系统提示的智能对话

引言

在AI对话系统开发中,有时候让AI助手能够根据不同场景动态调整其对话风格。本文将介绍如何使用OpenAI Agents框架实现动态系统提示,让AI助手能够以不同的人格特征进行对话。

完整代码

import asyncio
import random
from typing import Literal

from agents import Agent, RunContextWrapper, Runner


from agents import Agent, Runner,RunConfig,OpenAIProvider
run_config = RunConfig(model_provider = OpenAIProvider(
    api_key="your api key",
    base_url="https://open.bigmodel.cn/api/paas/v4/",
    use_responses=False,
    )
)


class CustomContext:
    def __init__(self, style: Literal["haiku", "pirate", "robot"]):
        self.style = style


def custom_instructions(
    run_context: RunContextWrapper[CustomContext], agent: Agent[CustomContext]
) -> str:
    context = run_context.context
    if context.style == "haiku":
        return "Only respond in haikus."
    elif context.style == "pirate":
        return "Respond as a pirate."
    else:
        return "Respond as a robot and say 'beep boop' a lot."


agent = Agent(
    name="Chat agent",
    instructions=custom_instructions,
    model="glm-4-flash"
)


async def main():
    choice: Literal["haiku", "pirate", "robot"] = random.choice(["haiku", "pirate", "robot"])
    context = CustomContext(style=choice)
    print(f"Using style: {choice}\n")

    user_message = "Tell me a joke."
    print(f"User: {user_message}")
    result = await Runner.run(agent, user_message, context=context,run_config=run_config)

    print(f"Assistant: {result.final_output}")


if __name__ == "__main__":
    asyncio.run(main())

"""
$python .My_test\dynamic_system_prompt_test.py
Using style: robot

User: Tell me a joke.
Assistant: Beep boop beep boop. Why don't scientists trust atoms? Because they make up everything!

Beep boop beep boop.
OPENAI_API_KEY is not set, skipping trace export


$python .My_test\dynamic_system_prompt_test.py
Using style: pirate

User: Tell me a joke.
Assistant: Arr, me hearties, here be a scallywag's jest for ye:

Why did the pirate hide his treasure on an island?

Because he wanted to keep it on a secret shire! Arr, arr, and arr!
OPENAI_API_KEY is not set, skipping trace export
"""

核心功能实现

1. 自定义上下文管理

class CustomContext:
    def __init__(self, style: Literal["haiku", "pirate", "robot"]):
        self.style = style

通过自定义上下文类,我们可以定义不同的对话风格,包括:

  • 俳句风格(haiku)
  • 海盗风格(pirate)
  • 机器人风格(robot)

2. 动态指令生成

def custom_instructions(
    run_context: RunContextWrapper[CustomContext], 
    agent: Agent[CustomContext]
) -> str:
    context = run_context.context
    if context.style == "haiku":
        return "Only respond in haikus."
    elif context.style == "pirate":
        return "Respond as a pirate."
    else:
        return "Respond as a robot and say 'beep boop' a lot."

技术特点

1. 灵活的风格切换

  • 随机选择对话风格
  • 运行时动态调整系统提示
  • 保持对话的连贯性

2. 异步处理

使用asyncio实现异步操作,提高系统响应效率:

async def main():
    choice = random.choice(["haiku", "pirate", "robot"])
    context = CustomContext(style=choice)

3. 交互式体验

  • 清晰的用户输入输出
  • 实时风格切换提示
  • 个性化的回答格式

应用场景

  1. 教育领域

    • 多样化的教学风格
    • 趣味性学习体验
    • 个性化教学助手
  2. 娱乐应用

    • 角色扮演游戏
    • 创意写作助手
    • 互动故事生成
  3. 客户服务

    • 场景化客服回答
    • 个性化用户体验
    • 多样化沟通方式

实现效果

机器人风格示例

Using style: robot
User: Tell me a joke.
Assistant: Beep boop beep boop. Why don't scientists trust atoms? 
Because they make up everything!

海盗风格示例

Using style: pirate
User: Tell me a joke.
Assistant: Arr, me hearties, here be a scallywag's jest for ye:
Why did the pirate hide his treasure on an island?
Because he wanted to keep it on a secret shire!

最佳实践

  1. 风格定义

    • 明确的风格特征
    • 一致的语言模式
    • 适当的角色设定
  2. 代码组织

    • 模块化设计
    • 清晰的类型注解
    • 可扩展的结构
  3. 错误处理

    • 优雅的异常处理
    • 完整的日志记录
    • 用户友好的提示

总结

通过OpenAI Agents框架实现的动态系统提示功能,不仅提供了灵活的对话风格切换能力,还为AI应用开发提供了新的可能性。这种方法可以广泛应用于教育、娱乐、客服等多个领域。

### LangChain与OpenAI的关系及集成方式 LangChain 和 OpenAI 是两个不同的技术实体,但它们可以协同工作以实现更强大的功能。以下是两者之间的关系以及如何集成的具体说明: #### 1. **定义与背景** LangChain 是一种开源框架,专注于构建复杂的应用程序链(chains),这些应用程序可以通过自然语言处理和其他机器学习模型来完成多步任务[^3]。它允许开发者组合多个组件,例如提示模板、LLM 调用器和工具集,从而创建端到端的工作流。 相比之下,OpenAI 提供了一系列预训练的语言模型和服务,如 GPT-3、GPT-3.5 Turbo 和 GPT-4。这些模型能够执行广泛的 NLP 功能,包括但不限于问答、文本生成、对话管理等[^4]。 #### 2. **主要区别** 两者的差异可以从以下几个方面分析: - **目标定位** OpenAI 的核心在于提供高性能的人工智能模型及其 API 接口;而 LangChain 则旨在通过模块化设计简化开发流程并增强灵活性。 - **适用场景** 如果仅需调用单一 LLM 完成特定任务,则可以直接利用 OpenAI SDK 或 RESTful APIs 实现快速部署。然而,在涉及复杂的业务逻辑或者需要串联多种技能的情况下,采用 LangChain 将更加高效且易于维护[^5]。 - **扩展能力** 借助于其灵活架构,LangChain 支持接入不同类型的外部服务(比如数据库查询、文件解析等等)。与此同时,也可以轻松切换底层使用的 LLM 来源——既可以是来自 OpenAI 的实例,也可能是其他供应商的产品或者是自训模型[^6]。 #### 3. **集成方法** 要让 LangChain 成功对接上 OpenAI 所提供的资源,通常按照如下方式进行配置操作: 首先安装必要的依赖库, ```bash pip install langchain openai ``` 接着设置环境变量 `OPENAI_API_KEY` ,以便后续能正常访问云端接口 。之后就可以编写 Python 脚本来初始化对象 并指定参数 如下所示 : ```python from langchain.llms import OpenAI llm = OpenAI(temperature=0.9) text = "What would be a good company name for a company that makes colorful socks?" print(llm(text)) ``` 上述代码片段展示了怎样简单地将 OpenAI 集成进入 LangChain 流程之中 [^7]. 另外值得注意的是 , 当前版本还支持更多高级特性 比如记忆机制(Memory),代理模式(Agents) 等等功能 这些都可以进一步提升用户体验 同时也为实际项目带来更大价值 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值