OddAgent:一个通用的意图、指令识别框架

想自己动手来手搓一个完全属于你自己的“小爱同学”、“小艺”吗?如果有你这么一个想法,而又不知道该如何开始的话,那么OddAgent项目可以成为你非常容易上手的开源项目。

本来这个功能是小落同学在2024年初就已经支持,由于前阵子公司老板说需要做一个基于LLM的智能助手系统,因此就先从小落同学项目里把相关的代码摘了一下出来,单独搞了一个OddAgent项目出来,作为一个基于LLM的智能助手系统,提供多轮问答、流式AI聊天等功能独立项目来演进。

OddAgent作为一个通用的意图、指令识别框架,跟业务无关,效果识别的准确率,可识别的能力,完全由你的智能体技术配置文件决定。

同时,OddAgent只负责识别意图、指令,不负责实现具体的功能。通过OddAgent识别出来意图、指令后,你需要自行实现工具逻辑,并调用对应的工具,完成相应的功能。

一、功能特性

1. 框架特性

  • 支持多轮对话
  • 支持流式AI聊天接口
  • 工具模板化处理
  • 支持语音对话(需要自行部署 OddAsr项目,并在config.json中将OddAsr部署的IP地址指向OddAsr所在的服务器)

OddAsr项目位于:https://github.com/oddmeta/oddasr ,若需要语音的支持,请自行部署。

2. 示例功能

根据视频会议的功能特性,在示例中实现了如下的助手功能:

  • 预约会议服务,可创建指定时间、地点的会议。
  • 创建会议服务。
  • 结束会议服务。
  • 加入会议服务,可加入指定会议。
  • 退出会议服务。
  • 邀请参会人服务,可邀请指定会议的参会人。
  • 挂断参会人服务,可挂断指定会议的参会人。
  • 打开摄像头服务。
  • 关闭摄像头服务。
  • 打开麦克风服务。
  • 关闭麦克风服务。
  • 发送双流服务。
  • 停止双流服务。
  • 打开同声字幕服务。
  • 打开会议纪要服务。
  • 关闭会议纪要服务。

二、快速开始

建议在一个虚拟环境里安装,以避免与其它的产品和项目冲突。我个人习惯用conda,你用venv, uv,poetry什么也都OK。下面以conda为例介绍整个安装。

环境要求: Python 3.10+

    1. 创建测试用的虚拟环境
conda create -n oddagent_testpython==3.12conda activate oddagent_test
    1. 在虚拟环境里安装OddAgent
pipinstall-i https://pypi.org/simple/ oddagent

非官方的镜像站可能不一定能找到最新版本,因此建议使用pypi官方源。

三、创建你自己的智能体项目

1. 步骤一:在任意你想要的目录下创建一个目录

如:d:\\myagent或者/home/user/myagent

2. 步骤二:下载项目配置样例

项目配置样例:https://oddmeta.net/tools/oddagent/config.json.sample
智能体配置样例:https://oddmeta.net/tools/oddagent/conference_config.json

下载好后放在你前面创建的目录下。然后复制config.json.sample,并将其改名为config.json

然后开始调整设置config.json里配置你自己的系统配置

四、配置你自己的系统配置

config.json系统配置里,必改的内容主要是两个:

  • 大模型配置:需要将你自己用的大模型的地址GPT_URL,模型名MODEL,以及API_KEY在配置里填一下
  • 智能体的配置:指定OddAgent启用哪个智能体。如果你有多个不同的智能体希望同时运行的话,可以参考后面的介绍《进阶用法:同时运行多个智能体

下面是一个系统配置的示例。

1. 大模型配置

"GPT_URL":"https://qianfan.baidubce.com/v2/chat/completions","MODEL":"ernie-4.5-turbo-128k","API_KEY":"your api key",

2. 智能体配置

"TOOL_CONFIG_FILE_EXT":"_config.py","TOOL_CONFIG_FILE":"agents/xiaoluo/xiaoluo_config.py",

五. 智能体技能配置

OddAgent支持通过JSON文件配置不同的智能体技能,配置文件位于你的项目根目录下agents目录下。

在agent_tool_list字段下面,将你要实现的功能一个个加进去:

  • tool_name: 工具名。建议可以是实际这个工具在实现时需要调用的API的名字。
  • name: 详细工具名。一个实际的、用户要以看在懂的名字。
  • description: 工具具体介绍。
  • example: 可选。如果这个工具是需要带调用参数的,建议在这里具体介绍一下,这里的介绍是会带在prompt提示词里送给大模型,让大模型来更清楚明白的了解这个工具所对应的意图(intent),以及更准确的去解析出此工具对应的slot(槽位)。
  • parameters: 可选。如果这个工具是需要带调用参数的,所有的参数需要在这里列示一下。同example一样,这里的内容也是会在prompt里带给大模型的,以便大模型更精准的解析意图及槽位。
  • enabled: 启用与否
  • tool_api_url: 【不建议使用】识别出工具意图后,实际实现该工具所需要调用的API的地址。
  • tool_api_headers: 【不建议使用】调用工具API时,需要在API的头信息里带的参数列表,如认证的token。
  • tool_api_method: 【不建议使用】调用工具API时,使用的方法(method),比如:GET/POST/PUT/DELETE等。

注意事项:
当前开源版本每个tool只提供一个parameter槽位的支持,请匆填充多个parameter,否则测试时会一直在要求你补充。

以下是一个示例配置。

{"global_variants":[],"agent_tool_list":[],{"tool_name":"meeting_schedule","name":"预约会议","description":"预约会议服务,可创建指定时间、地点的会议。","example":"JSON:[{'name': 'time', 'desc': '会议时间,格式为yyyy-MM-dd HH:mm:ss', 'value': ''} ]\n输入:帮我预约一个2046年4月18日10:00:00的会议\n答:{ 'time': '2046-04-18 10:00:00'}","parameters":[{"name":"time","desc":"会议时间,格式为yyyy-MM-dd HH:mm:ss","type":"string","required":false},],"enabled":true,"tool_api_url":"https://api.oddmeta.net/api/meeting_schedule","tool_api_headers":"{'Content-Type': 'application/json', 'Authorization': '{{ api_key }}'}","tool_api_method":"POST"}]}

六、运行测试你自己的智能体

1. 启动oddagent智能体后台

在你创建的自己的智能体项目的目录下,打开一个terminal命令行,然后启动oddagent。当然你也可以自己写个简单的脚本来实现启动或者自动启动。

启动命令:oddagent -c config.json

2. 启动测试界面

1)界面测试

oddagent后台加了一个简单的Web界面,专门用于测试和调试你的智能体技能配置,默认的地址是:http://localhost:5050
绑定的IP和端口可以在系统配置(config.json)里修改。
打开后的界面如下图所示

在这个界面里,你可以选择右边的命令词然后发送请求到oddagent,然后看看它是否正确的解析并返回了你要的意图和槽位,如果有一些命令词说法未能正确识别出意图和槽位的话,可以再继续对你的智能体技术配置里做调整。

2)实际API测试

OddAgent只做意图、指令的识别,所以实际场景里基本上都是在你自己的产品里用API来调用OddAgent识别意图指令,然后自行去实现相应的功能。
以下是一个API调用OddAgent的完整示例代码:

importjsonimportrequests API_BASE_URL='http://127.0.0.1:5050/oddagent/chat'# API地址defrecognize_intent(message):"""调用api_oddagent_chat API"""try:response=requests.post(API_BASE_URL,json={'question':message,'api_mode':1# 模拟API结果,0-不模拟,1-模拟,2-自定义API},headers={'Content-Type':'application/json'},timeout=30)response.raise_for_status()data=response.json()return{'err_code':200,'message':'success','data':data}exceptExceptionase:print(f"API调用失败:{str(e)}")return{'err_code':500,'message':f'API调用失败:{str(e)}','data':None}if__name__=='__main__':json_response=recognize_intent("开个周例会")print(json.dumps(json_response,ensure_ascii=False,indent=2))

运行测试代码:python test_oddagent.py

调用后返回的结果:

{"err_code":200,"message":"success","data":{"answer":{"data":"[模拟API模式] 假装成功!","err_code":0,"message":"[meeting_create] API调用成功","slots":{"meeting_name":"周例会"},"tool_name":"meeting_create"}}}

其中:

  • tool_name: 识别出来的意图(由智能体技能配置文件所配置)
  • slots: 该意图工具对应的槽位值。

再次强制:OddAgent作为一个通用的意图、指令识别框架,跟业务无关,效果完全由你的智能体技术配置文件决定。

七、进阶用法:同时运行多个智能体

在一些情况下,存在同时运行多个智能体的需求,建议的方案有两种。

1. 用一个oddagent搞定

在系统配置(config.json)里,你可以将TOOL_CONFIG_FILE设置为agents/xiaoluo/*,然后把你智能体配置都放到agents/xiaoluo目录下,这样 oddagent 在启动的时候就会去读取 这个目录下所有的*_config.json结尾的文件,并将他们加载起来。

2. 用多个oddagent分开部署

为每个智能体启用一个系统配置(config1.json, config2.json, config3.json…),并在每个系统配置里设置

  • TOOL_CONFIG_FILE: 指向对应智能体的配置文件。如:conference_config.pysmarthome_iot_config.py
  • BACKEND_PORT: 使用不同的端口,如:5050,5051,5052,5053…

以小落同学而言,她支持天气预报,会议调度,智能家居控制等多种智能体功能,她的做法是部署多个不同的智能体,也即:启动多个oddagent,每个oddagent配置一个智能体配置,并绑定一个端口,然后前置一个工作流接受用户输入,并根据用户的输出再导到不同的oddagent过去处理。

下面是小落同学的一个智能体示例。

\---oddagent|config.json|config.json.sample|+---agents|\---xiaoluo||conference_config.py||GAB_config.py||odd_bookmark_config.py||smarthome_iot_config.py||tpad_work_hour.py||weather_config.py||xiaoluo_config.py||__init__.py

如果想用一个oddagent搞定,那你就在系统配置config.json里将TOOL_CONFIG_FILE设置为agents/xiaoluo/*,然后在config.json所在的目录下:oddagent -c config.json启动 oddagent 即可。
如果想用多个 oddagent分开部署的话,就把系统配置config.json复制多份,并修改每个系统配置中对应的TOOL_CONFIG_FILEBACKEND_PORT,然后再每个oddagent分别启动即可:oddagent -c config1.json,oddagent -c config2.json

八、广而告之

新建了一个技术交流群,欢迎大家一起加入讨论。
扫码加入AI技术交流群(微信)
关注我的公众号:奥德元
让我们一起学习人工智能,一起追赶这个时代。
(若二维码过期了,可私信我)
有事+wx: oddmeta 交流群: 8655372

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java的宗教人才培养智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 宗教人才培养智慧管理系统主要功能模块涵盖会员管理、课程资源管理及考核体系等,旨在提升宗教人才的培养效率与质量。系统采用SpringMVC开发框架和MySQL数据库,确保数据安全高效处理。该系统设计清晰合理&#xff…

XGBoost早停稳住医疗分类

📝 博客主页:jaxzheng的CSDN主页 XGBoost早停策略:医疗分类模型的稳健性基石目录XGBoost早停策略:医疗分类模型的稳健性基石 引言:医疗AI的隐性危机与早停的崛起 医疗数据特性:过拟合的温床 早停机制&#…

一文读懂多模态大模型:5大模态!

“多模态”中的“模态”(modality),即指各类数据形式或信息来源。在多模态大模型中,典型模态涵盖以下类别:文本模态‌: 涵盖自然语言文本、经语音识别转换的文本内容等。 图像模态‌: 指视觉图像…

基于Java的安装生产智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安装生产智慧管理系统旨在革新传统管理方式,通过集成丰富功能模块实现智能化、高效化操作。系统涵盖会员操作管理、角色权限管理、客户及供应商管理等多个领域,并引入BOM管理和销售订单处理等功能,满足多…

基于Java的安规检测智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安规检测智慧管理系统基于Java技术开发,涵盖会员管理、客户管理等24个功能模块。系统采用SpringMVC框架和MySQL数据库实现高效数据处理与展示,适用于设备管理和维护、订单及报告跟踪等多个场景。相较于传统选题&…

吐血推荐自考必备AI论文写作软件TOP10

吐血推荐自考必备AI论文写作软件TOP10 自考论文写作工具测评:2026年TOP10榜单出炉 在自考学习过程中,论文写作往往是考生们最头疼的环节之一。从选题构思到资料收集,再到成文修改,每一个步骤都可能成为阻碍进度的“拦路虎”。而随…

AI模型开发的核心技术:预训练与微调,揭秘大模型进步的关键驱动力!

预训练和微调是现代AI模型的核心技术,通过两者的结合,机器能够在处理复杂任务时表现得更为高效和精准。 预训练为模型提供了广泛的语言能力,而微调则确保了模型能够根据特定任务进行细化和优化。 什么是预训练? 1.1 预训练的关键点…

吐血推荐8个AI论文软件,专科生毕业论文轻松搞定!

吐血推荐8个AI论文软件,专科生毕业论文轻松搞定! 专科生论文写作的救星,AI 工具如何改变你的学习方式 对于很多专科生来说,毕业论文不仅是一项学术任务,更是一次心理挑战。从选题到开题,从初稿到修改&#…

全新UI简易漂流瓶系统源码

源码介绍:全新UI简易漂流瓶系统源码 更新日志: ✔ 功能优化:新增「自己不能捡到自己瓶子」的防误触机制 ✔ 交互升级:优化页面细节,操作体验更流畅下载地址(无套路,无须解压密码)htt…

基于Java的安防监控综合智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安防监控综合智慧管理系统致力于为传统选题带来创新性提升,其主要功能模块化设计使得系统易于理解和操作。该系统不仅涵盖了设备管理、摄像头及录像记录等基本功能,还进一步扩展至环境监测数据管理与人员进出记录管理…

Java程序员大模型开发转型宝典:五大步骤助你轻松入门,七大热门岗位高薪详解!

文章为Java程序员提供了转型大模型开发的完整指南,包括大模型概念理解、五大转型步骤,以及Java程序员在此过程中的优势。文章介绍了AI大模型时代七大热门技术岗位,详细列出AI工程师所需知识,强调掌握大模型技术带来的高薪机会&…

大数据领域分布式存储中的数据迁移方法

大数据领域分布式存储中的数据迁移方法:从"搬书"到"搬家"的技术解密 关键词:分布式存储、数据迁移、一致性保障、负载均衡、迁移策略 摘要:在大数据时代,分布式存储系统(如HDFS、Ceph)就像数字世界的"超级图书馆",但随着业务增长,我们常…

基于springboot的仁和机构的体检预约系统的设计与实现(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。1. 程序背景你开发的仁和机构体检预约系统,核心背景是传统体检预约与管理模式存在显著弊端&am…

亲测有效,86W+!北航硕士亲授大模型学习路线图:从原理到开发!

本文展示了大模型领域的高薪前景(86-94W),专业人才稀缺。课程涵盖Flash Attention、RAG、LoRA、多模态模型等技术,帮助系统掌握大模型原理与应用开发,提升科研与就业竞争力。北航计算机硕士,收到3份大模型offer,薪资86…

【免费源码】扣扣网易音乐解析UI模版 自适应双端

源码介绍:扣扣网易音乐解析UI模版 自适应双端 试了下,仅html模板,放进去链接解析后提示报错,下载地址(无套路,无须解压密码)https://pan.quark.cn/s/9c364815a0d4源码截图:

MTools v0.0.8:Windows 媒体人工具箱

作为面向媒体人及相关从业者的高效桌面工具集,媒体人工具箱 MTools v0.0.8 专为 Windows 用户打造,集成图片处理、音视频编辑、AI 智能工具与开发辅助功能,支持跨平台 GPU 加速,凭借精美界面与强大实用性,成为媒体创作…

LocalAI:无需GPU即可运行的大模型平台!

LocalAI是开源的本地AI大模型运行平台,无需GPU即可使用。它完全兼容OpenAI API,支持多模态模型,采用GoC架构,提供P2P分布式推理功能。解决了隐私保护、成本控制、网络依赖和硬件门槛等痛点,适合企业知识库、边缘设备AI…

Fiddler 模拟弱网环境测试

为什么要进行弱网环境测试? 由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,导致会出现一些意想不到的非功能性bug,影响用户体检。比如 利用Fiddler,Charles等具有代理服务器功能的网络流量分析软件来实现…

Postman如何做接口测试:如何导入 swagger 接口文档

↵在使用 postman 做接口测试过程中,测试工程师会往界面中填入非常多的参数,包括 url 地址,请求方法,消息头和消息体等一系列数据,在请求参数比较多的情况下非常花时间。我们可以使用 postman 的文档导入功能&#xff…

基于Java的安防监管智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安防监管智慧管理系统结合了现代科技与安全管理需求,旨在提升传统安防系统的智能化管理水平。该系统不仅涵盖了设备管理、区域划分和视频监控等基础功能模块,还深入到报警规则设定及事件处理等多个维度,能…