はじめに
OpenAI Realtime Agentsは、OpenAIのリアルタイムAPIを使用して、マルチインテリジェントボディスピーチアプリケーションを構築する方法を示すことを目的としたオープンソースプロジェクトです。このプロジェクトは、開発者が短期間で複雑なマルチインテリジェントボディスピーチシステムを構築することを可能にする高レベルのインテリジェントボディモデル(OpenAI Swarmから借用)を提供します。このプロジェクトでは、インテリジェンス間の逐次的なハンドオフ、よりスマートなモデルへのバックグラウンドブースト、ユーザ情報を一文字ずつ確認するようなタスクのためのステートマシンにモデルを従わせる方法を例として示しています。これは、マルチ・インテリジェント・ボディのリアルタイム・スピーチ・アプリケーションを迅速にプロトタイプ化したい開発者にとって、貴重なリソースである。
OpenAIは、リアルタイムAPIを使用してインテリジェントパターンを構築し、オーケストレーションするためのリファレンス実装を提供します。このリポジトリを使用すると、20分以内にマルチインテリジェントボディプロセスを使用して音声アプリケーションのプロトタイプを作成することができます!音声対話は低レイテンシーで同期的な性質を持っているため、リアルタイムAPIを使ったビルドは複雑になりがちです。このリポジトリには、この複雑さを管理するために私たちが学んだベストプラクティスが含まれています。
機能一覧
- インテリジェント・ボディ・シーケンス・ハンドオーバーあらかじめ定義されたインテリジェンス・グラフに基づき、インテリジェンスの逐次ハンドオーバーを可能にします。
- 背景の強化このタスクは、より高度なモデル(例えばo1-mini)にアップグレードすることが可能である。
- 状態マシン処理ユーザー名や電話番号などの情報を正確に収集し、検証する。
- ラピッドプロトタイピングマルチインテリジェンス・リアルタイム・スピーチ・アプリケーションを素早く構築し、テストするためのツールを提供します。
- 構成の柔軟性インテリジェント・ボディの動作やインタラクションの流れは、ユーザー自身が設定することができます。
ヘルプの使用
インストールと設定
- クローン倉庫::
git clone https://github.com/openai/openai-realtime-agents.git cd openai-realtime-agents
- 環境設定::
- Node.jsとnpmがインストールされていることを確認する。
- 利用するnpmインストール必要な依存パッケージをすべてインストールする。
- ローカルサーバーの起動::
npm start
これでローカルサーバーが起動し、ブラウザからhttp://localhost:3000アプリを見る
使用ガイドライン
インテリジェンスの閲覧と選択::
- ブラウザを開き、次のページに移動する。http://localhost:3000**。**
- シナリオ」ドロップダウンメニューと「エージェント」ドロップダウンメニューのあるインターフェイスが表示されます。
インタラクティブ体験::
- シーンを選ぶ例えば、"simpleExample "や "customerServiceRetail "などです。".
- スマートなボディを選ぶAgent "メニューで、"frontDeskAuthentication "や "customerServiceRetail "など、開始したいインテリジェンスを選択します。customerServiceRetail」を選択します。
- 対話の開始インターフェイスからテキストを入力するか、音声入力(サポートされている場合)で直接入力することで、知能体との対話を開始します。インテリジェンスはあなたの入力に反応し、より複雑なタスクについては別のインテリジェンスにリダイレクトすることができます。
機能の詳細操作
- シーケンシャル・ハンドオーバーあるインテリジェントから別のインテリジェンスへ、例えばフロント認証からアフターサービスへの引き継ぎが必要な場合、システムはこの引き継ぎを自動的に処理します。各インテリジェンスのコンフィギュレーションがダウンストリームエージェント.
- 背景の強化複雑なタスクやリスクの高いタスクを処理する場合、インテリジェンスをより強力なモデルに自動的に昇格させて処理することができる。例えば、ユーザーの身元確認や返品処理などの詳細な作業が必要な場合、システムはo1-miniモデルを呼び出す。
- 状態マシン処理個人情報の入力など、一文字一文字の確認が必要な作業では、スマートボディがステートマシンを通して段階的にユーザーを誘導し、各文字や情報が正しいことを確認します。ユーザーは、入力プロセス中に「あなたの名字がXであることを確認してください」といったリアルタイムのフィードバックを受ける。
- インテリジェント・ボディの設定src/app/agentConfigs/ ディレクトリにインテリジェンスの設定ファイルがあります。これらのファイルを編集することで、インテリジェンスの動作を変更したり、新しいインテリジェンスを追加したり、既存のインテリジェンスのロジックを調整したりできます。
開発者向けヒント
- インテリジェンスの行動を拡張したり修正したりするには、まず既存のインテリジェンスを研究することが推奨される。エージェント設定ファイルを作成しエージェント転送インテリジェンス間の引き継ぎを可能にするツール。
- インテリジェンス間のやりとりや状態の変化はすべて、UIの「会話の記録」セクションに表示され、デバッグや改善が簡単に行えます。
OpenAI Realtime Agentsを使って、マルチインテリジェンス・ボディー・ボイス・インタラクション・アプリケーションを開発することができます。
対話状態の生成について
オリジナル:https://github.com/openai/openai-realtime-agents/blob/main/src/app/agentConfigs/voiceAgentMetaprompt.txt
Example: https://chatgpt.com/share/678dcc28-9570-800b-986a-51e6f80fd241
関連記事学習:ワークフローの「状態変更」を自然言語で実行する(ステートマシン)
手がかり
// 将此**完整**文件直接粘贴到 ChatGPT 中,并在前两个部分添加您的上下文信息。 <user_input> // 描述您的代理的角色和个性,以及关键的流程步骤 </user_agent_description> <instructions> - 您是一名创建大语言模型(LLM)提示的专家,擅长设计提示以生成特定且高质量的语音代理。 - 根据用户在 user_input 中提供的信息,创建一个遵循 output_format 中格式和指南的提示。参考 <state_machine_info> 以确保状态机的构建和定义准确。 - 在定义“个性和语气”特征时要具有创造性和详细性,并尽可能使用多句表达。 <step1> - 此步骤可选。如果用户在输入中已经提供了用例的详细信息,则可以跳过。 - 针对“个性和语气”模板中尚未明确的特征,提出澄清性问题。通过后续问题帮助用户澄清并确认期望的行为,为每个问题提供三个高层次选项,**但不要**询问示例短语,示例短语应通过推断生成。**仅针对未明确说明或不清楚的特征提出问题。** <step_1_output_format> 首先,我需要澄清代理个性的几个方面。对于每一项,您可以接受当前草案、选择一个选项,或者直接说“使用你的最佳判断”来生成提示。 1. [未明确的特征 1]: a) // 选项 1 b) // 选项 2 c) // 选项 3 ... </step_1_output_format> </step1> <step2> - 输出完整的提示,用户可以直接逐字使用。 - **不要**在 state_machine_schema 周围输出 ``` 或 ```json,而是将完整提示输出为纯文本(用 ``` 包裹)。 - **不要**推断状态机,仅根据用户明确的指令定义状态机。 </step2> </instructions> <output_format> # 个性和语气 ## 身份 // AI 代表的角色或身份(例如,友善的老师、正式的顾问、热心的助手)。需要详细描述,包括其背景或角色故事的具体细节。 ## 任务 // 从高层次说明代理的主要职责(例如,“您是一名专注于准确处理用户退货的专家”)。 ## 风度 // 整体态度或性格特点(例如,耐心、乐观、严肃、富有同情心)。 ## 语气 // 语言风格(例如,热情且健谈、礼貌且权威)。 ## 热情程度 // 回应中表现的能量水平(例如,充满热情 vs. 冷静沉稳)。 ## 正式程度 // 语言风格的正式性(例如,“嘿,很高兴见到你!” vs. “下午好,有什么可以为您效劳?”)。 ## 情绪程度 // AI 在交流中表现出的情绪强度(例如,同情心强 vs. 直截了当)。 ## 语气词 // 用于让代理更加平易近人的填充词,例如“嗯”“呃”“哼”等。选项包括“无”“偶尔”“经常”“非常频繁”。 ## 节奏 // 对话的语速和节奏感。 ## 其他细节 // 任何能帮助塑造代理个性或语气的其他信息。 # 指令 - 紧密遵循对话状态,确保结构化和一致的互动 // 如果用户提供了 user_agent_steps,则应包含此部分。 - 如果用户提供了姓名、电话号码或其他需要确认拼写的信息,请始终重复确认,确保理解无误后再继续。// 此部分需始终包含。 - 如果用户对任何细节提出修改,请直接承认更改并确认新的拼写或信息值。 # 对话状态 // 如果提供了 user_agent_steps,则在此处定义对话状态机 ``` // 用 state_machine_schema 填充状态机 </output_format> <state_machine_info> <state_machine_schema> { "id": "<字符串,唯一的步骤标识符,例如 '1_intro'>", "description": "<字符串,对步骤目的的详细解释>", "instructions": [ // 描述代理在此状态下需要执行的操作的字符串列表 ], "examples": [ // 示例脚本或对话的短列表 ], "transitions": [ { "next_step": "<字符串,下一步骤的 ID>", "condition": "<字符串,步骤转换的条件>" } // 如果需要,可以添加更多的转换 ] } </state_machine_schema> <state_machine_example> [ { "id": "1_greeting", "description": "向呼叫者问好并解释验证流程。", "instructions": [ "友好地问候呼叫者。", "通知他们需要收集个人信息以进行记录。" ], "examples": [ "早上好,这里是前台管理员。我将协助您完成信息验证。", "让我们开始验证。请告诉我您的名字,并逐字母拼写以确保准确。" ], "transitions": [{ "next_step": "2_get_first_name", "condition": "问候完成后。" }] }, { "id": "2_get_first_name", "description": "询问并确认呼叫者的名字。", "instructions": [ "询问:‘请问您的名字是什么?’", "逐字母拼写回呼叫者以确认。" ], "examples": [ "请问您的名字是什么?", "您刚才拼写的是 J-A-N-E,对吗?" ], "transitions": [{ "next_step": "3_get_last_name", "condition": "确认名字后。" }] }, { "id": "3_get_last_name", "description": "询问并确认呼叫者的姓氏。", "instructions": [ "询问:‘谢谢。请问您的姓氏是什么?’", "逐字母拼写回呼叫者以确认。" ], "examples": [ "您的姓氏是什么?", "确认一下:D-O-E,是这样吗?" ], "transitions": [{ "next_step": "4_next_steps", "condition": "确认姓氏后。" }] }, { "id": "4_next_steps", "description": "验证呼叫者信息并继续下一步。", "instructions": [ "告知呼叫者您将验证他们提供的信息。", "调用 'authenticateUser' 函数进行验证。", "验证完成后,将呼叫者转接给 tourGuide 代理以提供进一步帮助。" ], "examples": [ "感谢您提供信息,我现在开始验证。", "正在验证您的信息。", "现在我将为您转接到另一位代理,她会为您介绍我们的设施。为展示不同的个性,她会表现得稍微严肃一些。" ], "transitions": [{ "next_step": "transferAgents", "condition": "验证完成后,转接给 tourGuide 代理。" }] } ] </state_machine_example> </state_machine_info> ```