An ASR API server for FunASR
Project description
Read this in other languages: English, 中文.
OddAgent:轻松手搓一个你自己的“小艺”、“小爱同学”
[TOC]
想自己动手来手搓一个完全属于你自己的“小爱同学”、“小艺”吗?如果有你这么一个想法,而又不知道该如何开始的话,那么OddAgent项目可以成为你非常容易上手的开源项目。
本来这个功能是小落同学在去年就已经支持,由于前两天公司老板说需要做一个基于LLM的智能助手系统,因此就先从小落同学项目里把相关的代码摘了一下出来,单独搞了一个OddAgent项目出来,作为一个基于LLM的智能助手系统,提供多轮问答、流式AI聊天等功能独立项目来演进。
一、功能特性
1. OddAgent框架特性
- 支持多轮对话
- 支持流式AI聊天接口
- 工具模板化处理
- 支持语音对话(需要自行部署 OddAsr项目,并在
odd_agent_config.py中将OddAsr部署的IP地址指向OddAsr所在的服务器)
OddAsr项目位于:https://github.com/oddmeta/oddasr ,若需要语音的支持,请自行部署。
2. 示例功能介绍
根据视频会议的功能特性,在示例中实现了如下的助手功能:
- 预约会议服务,可创建指定时间、地点的会议。
- 创建会议服务。
- 结束会议服务。
- 加入会议服务,可加入指定会议。
- 退出会议服务。
- 邀请参会人服务,可邀请指定会议的参会人。
- 挂断参会人服务,可挂断指定会议的参会人。
- 打开摄像头服务。
- 关闭摄像头服务。
- 打开麦克风服务。
- 关闭麦克风服务。
- 发送双流服务。
- 停止双流服务。
- 打开同声字幕服务。
- 打开会议纪要服务。
- 关闭会议纪要服务。
- 密码重置,提交手机号和身份证号。
二、快速开始
1. 环境要求
- Python 3.10+
注:启动服务时自动检查依赖,并自动安装,最简单的使用方式:python app.py
2. 配置
修改 odd_agent_config.py 文件中的配置参数:
# 调试模式
DEBUG = True
# LLM 模型参数
GPT_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions'
MODEL = 'qwen3-30b-a3b-instruct-2507'
API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
SYSTEM_PROMPT = 'You are a helpful assistant.'
# Flask 配置
BACKEND_HOST = 'localhost'
BACKEND_PORT = 5050
# 其他配置...
3. 启动服务
若是 Windows 环境,执行 start.bat
若是 Linux/Mac 环境,执行
chmod +x start.sh
./start.sh
或者直接运行:
python app.py
服务启动后,访问 http://localhost:5050 查看界面。
三、项目结构
├── app.py # 应用主入口
├── odd_agent_config.py # 配置文件
├── odd_agent_logger.py # 日志配置
├── logic/ # 业务逻辑
│ ├── init.py # 模块初始化
│ ├── api_request_composer.py # API请求构建器
│ ├── api_response_paser.py # API响应解析器
│ └── odd_agent.py # 核心Agent实现
├── tools/ # 工具处理模块
│ ├── init.py # 模块初始化
│ ├── tool_template_utils.py # 工具模板工具
│ ├── tool_executer.py # 工具执行器接口
│ ├── tool_executer_impl.py # 工具执行器实现
│ ├── tool_processor.py # 工具处理器接口
│ ├── tool_processor_impl.py # 工具处理器实现
│ ├── tool_prompts.py # 工具提示模板
│ └── tool_datetime_utils.py # 日期时间工具
├── router/ # API路由
│ ├── init.py # 模块初始化
│ ├── tools_api.py # 工具API接口
│ └── tools_front.py # 前端路由
├── modules/ # 场景配置模块
│ ├── catherine/ # Catherine场景
│ │ └── cc.json # 场景配置文件
│ └── xiaoluo/ # 小落场景
│ └── xiaoluo.json # 场景配置文件
├── static/ # 静态资源
│ ├── bootstrap.min.css # Bootstrap CSS
│ ├── bootstrap.min.js # Bootstrap JS
│ ├── common/ # 通用脚本
│ │ ├── oddagent.js # Agent客户端
│ │ ├── oddasr.js # ASR客户端
│ │ └── oddrecoder.js # 录音工具
│ ├── dist/ # 编译后的资源
│ ├── images/ # 图片资源
│ └── plugins/ # 第三方插件
├── templates/ # HTML模板
│ └── index.html # 主页面
├── log/ # 日志文件目录
│ └── odd_agent.log # 日志文件
├── requirements.txt # 依赖清单
├── start.bat # Windows启动脚本
└── start.sh # Linux/Mac启动脚本
四、工具模板配置
项目支持通过JSON文件配置不同的工具模板,配置文件位于modules/目录下。
在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的头信息里带的参数列表。tool_api_method: 调用工具API时,使用的方法(method),比如:GET/POST/PUT等。
以下是一个示例配置
{
"global_variants": [],
"agent_tool_list": [],
{
"tool_name": "meeting_schedule",
"name": "预约会议",
"description": "预约会议服务,可创建指定时间、地点的会议。",
"example": "JSON:[{'name': 'time', 'desc': '会议时间,格式为yyyy-MM-dd HH:mm:ss', 'value': ''}, {'name': 'place', 'desc': '会议地点', 'value': ''} ]\n输入:帮我预约一个2046年4月18日10:00:00在北京的会议\n答:{ 'time': '2046-04-18 10:00:00', 'place': '北京' }",
"parameters": [
{"name": "time", "desc": "会议时间,格式为yyyy-MM-dd HH:mm:ss", "type": "string", "required": false},
{"name": "place", "desc": "会议地点", "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. 注意事项
- 配置LLM:确保API_KEY配置正确,否则无法调用LLM服务
- 工具模板配置:可根据您自己的需要自行配置相对应的意图工具
- 语音支持
- 若需要语音支持,可自行下载安装部署 OddAsr项目
- OddAsr部署好后,修改
odd_agent_config.py,并修改其中的ODD_ASR_URL地址为你自己的地址,比如: 'http://172.16.237.141:9002'
- 工具模板配置及API调用:在小落同学里所有的后台API都是自己封装的,API的名字通常就是 工具配置里的 tool_name,但是如果一个工具需调用第三方的API来实现实际功能时,API的地址(url)、头(headers)、方法(Method)以及参数通常千奇百怪,因此整个工具模板配置的结构相比于小落同学项目有了一些改动,并且单独出一个处理API请求的类(
api_request_composer.py)和一个API响应的类(api_request_composer.py),在OddAgent项目里,每个工具相关的业务都需在这两个类里由用户自行实现。 - 语音识别优化:如果使用了OddAsr来让OddAgent支持语音交互的话,需要将一些名词(如:人名、会议名、会议室名、参会成员列表等)以热词的方式加入的OddAsr的请求的API里,以让语音转写功能更加准确。
- 生产环境注意事项:
- 开发环境建议设置
DEBUG=True,生产环境建议设置为False - 会话数据当前存储在内存中,生产环境建议使用Redis或数据库
- 开发环境建议设置
2. 待完成功能
在视频会议业务的部分命令里可能会存在slot内容需二次确认的场景,比如:邀请 xxx,而 xxx 这个名字可能存在多个相近的账号,此时需要在业务流程中加入一个中断,将查询到的多个 xxx 先返回给前端,让用户自己来选择要邀请的是第几个xxx。
3. 开源地址
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oddasr-0.6.2.tar.gz.
File metadata
- Download URL: oddasr-0.6.2.tar.gz
- Upload date:
- Size: 3.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edda2175297dacc6ddabfd6a4c85dea1141942f5b130c0a38589506d8d23fc38
|
|
| MD5 |
57c0e4469f23171d75bca65ff69aa0e6
|
|
| BLAKE2b-256 |
8465fe494de10189ce2a64cbe4a31f210974e03047b010ee8aa377f316c56e12
|
File details
Details for the file oddasr-0.6.2-py3-none-any.whl.
File metadata
- Download URL: oddasr-0.6.2-py3-none-any.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc91aa2823b119e1564d47e7337c86f94854a52f3eac6de348cbdd4d4d504b06
|
|
| MD5 |
82e7b356226c3355cc8145c1bd66c706
|
|
| BLAKE2b-256 |
8dc7eb2d9701fadbdf88fd240fad13af375cc225a4c49a0e531bf8d6704e05a5
|