# any4any **Repository Path**: eogee/any4any ## Basic Information - **Project Name**: any4any - **Description**: any4any: 语音识别、文本转语音、文档重排、数据库连接、知识库文本处理和MCP服务的一键式API服务 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: https://eogee.com - **GVP Project**: No ## Statistics - **Stars**: 43 - **Forks**: 13 - **Created**: 2025-05-16 - **Last Updated**: 2025-06-11 ## Categories & Tags **Categories**: tts **Tags**: None ## README # any4any: 语音识别、文本转语音、文档重排、数据库连接、知识库文本处理和MCP服务的一键式API服务
中文简体 · English
## 功能特性 - 语音转录:将音频文件转换为文本。 - 文本转语音:将文本转换为语音文件(支持多种语音风格):默认使用`zh-CN-XiaoyiNeural`音色。 - 文档重排:基于查询对文档进行相关性排序。 - MySQL数据库API:数据库连接并执行SQL查询和更新操作。 - MCP服务:支持构建MCP工具、接口,可在任意MCP客户端调用。 - 自动清理:生成的临时音频文件会在响应后自动删除。 - 文本处理:将文本分块、关键词提取、文本追加写入、知识库处理。 - API文档:自动生成API使用说明,可通过浏览器访问:http://localhost:8888/docs#/ ## 更新内容 **2025.5.24(V0.0.6):新增支持构建MCP服务** 新增: - MCP工具构建:可在`core/mcp_tools.py`中任意添加MCP工具,默认提供了两个整数的加、减、乘和除的计算。 - MCP工具注册:在`app.py`中引入对应的模块,如`from core.mcp_tools import add, sub, mul, div`,并在`mcp.tool()`函数中注册。 - MCP服务服务启动:运行启动命令:`python cli.py`或`a4a-run`,服务将运行在: http://localhost:9999/sse 在Dify和Cherrystudio中调用的示例文档见:[mcp_test.md](./docs/mcp_test.md)(稍后补全)。 dify工作流文件:[mcp_test.yml](./workflows/mcp_test.yml)。 **2025.5.18(V0.0.5):新增支持文本添加关键词(text_add_keywords)** 新增: - 文本分块:将`.text`或`.md`文件按照一定字符数进行分块,并返回分块后的文本,默认按每2000字符分块,允许200字符重叠。 - 文本关键词提取:配合大模型语义理解能力将分块后的内容进行关键字提取,默认提取10-20个关键词。 - 文本追加写入:将原始文本和提取的关键词追加到新的`.text`文件中,文件位于`data/text_add_keywords.txt`。 - 知识库处理:可以在dify中使用生成的`.text`文件作为知识库,进行文本检索。 具体API文档见:[text_add_keywords.md](./docs/text_add_keywords.md)。 dify工作流文件:[text_add_keywords.yml](./workflows/text_add_keywords.yml)。 ## 前置环境要求 - wsl2 (Windows Subsystem for Linux):windows系统下的必要条件。 - Conda (Anaconda or Miniconda):用于管理Python环境。 - Docker-desktop:windows系统下的Docker桌面应用,用于运行dify服务。 ## 安装指南 ### 1.克隆本项目 ```bash git clone https://github.com/eogee/any4any.git # 或 git clone https://gitee.com/eogee/any4any.git ``` 你也可以通过网盘下载本项目:https://pan.quark.cn/s/ea4434702727 ### 2.下载模型 ```bash # 确认已安装git-lfs (https://git-lfs.com),用于下载大文件 git lfs install # 下载语音识别模型:SenseVoiceSmall git clone https://hf-mirror.com/FunAudioLLM/SenseVoiceSmall # 或 git clone https://hugginface.co/FunAudioLLM/SenseVoiceSmall # 下载重排序模型:bge-reranker-base git clone https://hf-mirror.com/BAAI/bge-reranker-base # 或 git clone https://hugginface.co/BAAI/bge-reranker-base ``` ### 2. 创建conda环境 ```bash # 创建conda环境 conda create -n any4any python=3.10 # 激活环境 conda activate any4any ``` 3. 安装依赖 ```bash # 安装ffmpeg sudo apt-get install ffmpeg # 验证ffmpeg是否安装成功 ffmpeg -version # 安装其他依赖 pip install -r requirements.txt ``` 4. 启动服务 ```bash # 直接启动服务 python cli.py # 或使用快捷命令(WSL/Linux环境): # 永久安装any4any-run命令: sudo cp a4a-run.sh /usr/local/bin/a4a-run sudo chmod +x /usr/local/bin/a4a-run # 安装后可直接使用: a4a-run ``` 服务将运行在: http://localhost:8888 ### 5. dify内添加并调用模型 **5.1查看宿主机的ip地址** 在wsl命令行中执行`ifconfig`命令,查看宿主机的ip地址。 ```bash eth0: flags=4163 mtu 1500 inet 172.21.56.14 netmask 255.255.240.0 broadcast 172.21.63.255 ``` 其中`172.21.56.14`即为宿主机的ip地址。 **5.2导入TTS模型** 启动Docker并保证dify服务正常运行。 将插件`langgenius-openai_api_compatible_0.0.16.difypkg`导入并安装至dify中。 打开`OpenAI-API-compatible`插件,点击`添加模型`,配置内容如下: ``` 模型类型:TTS 模型名称:edge-tts API endpoint URL:`http://172.21.56.14:8888/v1` 或 `http://host.docker.internal:8888/v1` API Key:EMPTY 可用声音(用英文逗号分隔):zh-CN-XiaoyiNeural 其他可空余不填 ``` **5.3导入ASR模型** 配置模型路径: ``` #config.py ASR_MODEL_DIR = "/mnt/c/models/SenseVoiceSmall" # 替换为你本地ASR模型路径 ``` 打开`OpenAI-API-compatible`插件,点击`添加模型`,配置内容如下: ``` 模型类型:Speech2text 模型名称:SenseVoiceSmall API Key:EMPTY API endpoint URL:`http://172.21.56.14:8888/v1` 或 `http://host.docker.internal:8888/v1` ``` **5.4导入Rerank模型** 配置模型路径: ``` #config.py RERANK_MODEL_DIR = "/mnt/c/models/bge-reranker-base" # 替换为你本地ASR模型路径 ``` 同样打开`OpenAI-API-compatible`插件,点击`添加模型`,配置内容如下: ``` 模型类型:rerank 模型名称:bge-reranker-base API Key:EMPTY API endpoint URL:`http://172.21.56.14:8888/v1` 或 `http://host.docker.internal:8888/v1` ``` **5.5设置为默认模型** 在右上角`系统模型设置`中的最下方,将`文本转语音模型`设置为`edge-tts`,将`语音识别模型`设置为`SenseVoiceSmall`,将`文档重排模型`设置为`bge-reranker-base`,点击,保存设置。 **5.6使用模型** 添加任意一个`chatflow`,进入工作流内容后在右上角`功能`,找到`文字转语音`和`语音转文字`功能,配置我们添加好的模型,将`自动播放`打开,然后对话即可。 ### 6. dify中连接MySQL数据库 **6.1连接配置** 在`config.py`中配置MySQL数据库连接信息: ```python MYSQL_HOST = "172.17.64.1" # 在cmd中使用ipconfig | findstr "IPv4" 查看并替换为你的实际的IP地址 MYSQL_PORT = 3306 MYSQL_USER = "root" MYSQL_PASSWORD = "root" MYSQL_DATABASE = "any4any" # 替换为你的数据库名称 ``` **6.2MySQL数据库配置** 在MySQL服务中运行以下命令,允许wsl中的宿主机(172.21.56.14)访问数据库: ```mysql -- 允许 wsl中的宿主机(172.21.56.14)访问数据库 使用 root 用户连接所有数据库(*.*) -- YOUR_PASSWORD 替换为你的数据库密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.21.56.14' IDENTIFIED BY 'YOUR_PASSWORD'; -- 如果 MySQL 8.0+,可能需要分开创建用户并授权 CREATE USER 'root'@'172.21.56.14' IDENTIFIED BY 'YOUR_PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.21.56.14'; ``` **6.3构建http请求** 在dify中的`workflow`或`chatflow`中添加`http请求节点`,配置信息如下: ``` 请求方式:POST 请求地址:http://localhost:8888/v1/db/query form-data参数名:query form-data参数值:SELECT * FROM users LIMIT 1 # 示例查询语句 ``` ## 配置说明 在`config.py`中修改以下配置: ```python import os import torch class Config: # 服务器配置 HOST = "0.0.0.0" PORT = 8888 # 认证配置 API_KEY = "EMPTY" # 替换为你的实际API密钥 # 模型配置 DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu" ASR_MODEL_DIR = "/mnt/c/models/SenseVoiceSmall" # 替换为你本地ASR模型路径 RERANK_MODEL_DIR = "/mnt/c/models/bge-reranker-base" # 替换为你本地rerank模型路径 # MySQL数据库配置 MYSQL_HOST = "172.21.48.1" # 替换为你的实际的IP地址 可以在cmd中使用ipconfig | findstr "IPv4" 查看 MYSQL_PORT = 3306 MYSQL_USER = "root" MYSQL_PASSWORD = "root" MYSQL_DATABASE = "any4any" # 替换为你的数据库名称 # 功能开关配置 NO_THINK = True # 是否开启nothink QUERY_CLEANING = True # 是否开启SQL查询清洗功能 PROMPT = "" # 自定义提示词 # 确保模型目录存在 os.makedirs(ASR_MODEL_DIR, exist_ok=True) os.makedirs(RERANK_MODEL_DIR, exist_ok=True) ``` ## API使用示例 ### 语音转录 ```bash curl -X POST "http://localhost:8888/v1/audio/transcriptions" \ -H "Authorization: Bearer EMPTY" \ -F "file=@audio.wav" \ -F "model=whisper-1" \ -F "language=zh" ``` ### 文本转语音 ```bash curl -X POST "http://localhost:8888/v1/audio/speech" \ -H "Authorization: Bearer EMPTY" \ -H "Content-Type: application/json" \ -d '{"input": "Hello,any4any!", "voice": "zh-CN-XiaoyiNeural"}' \ -o "output.mp3" ``` ### 文档重排 ```bash curl -X POST "http://localhost:8888/v1/rerank" \ -H "Authorization: Bearer EMPTY" \ -H "Content-Type: application/json" \ -d '{"query": "你好,any4any!", "documents": ["hello,any4any!", "any4any!", "heello,world!"]}' \ -o "output.json" ``` ### 连接MySQL数据库 **支持两种请求格式**: 1. application/json 2. multipart/form-data **安全警告**:当前实现未使用参数化查询,存在SQL注入风险 **JSON格式请求**: ```bash curl -X POST "http://localhost:8888/v1/db/query" \ -H "Content-Type: application/json" \ -d '{"query":"SELECT * FROM users LIMIT 1"}' ``` **form-data格式请求**: ```bash curl -X POST "http://localhost:8888/v1/db/query" \ -F "query=SELECT * FROM users LIMIT 1" ``` ### 健康检查 ```bash curl http://localhost:8888/health ``` ## 相关开源项目 - edge-tts:https://github.com/rany2/edge-tts - SenseVoice:https://github.com/FunAudioLLM/SenseVoice - bge-reranker-base:https://hf-mirror.com/BAAI/bge-reranker-base - dify:https://github.com/langgenius/dify - fastapi:https://github.com/fastapi/fastapi ## 更新计划 - 增加更多TTS和ASR模型的支持 - 构建前端界面,提供更友好的用户体验 - 增加其他接口和服务 ## 联系我们 - 官方网站:https://eogee.com - 邮箱:eogee@qq.com - B站:https://space.bilibili.com/315734619 - 抖音:[抖音eogee](https://www.douyin.com/user/MS4wLjABAAAAdH5__CXhFJtSrDQKNuI_vh4mI4-LdyQ_LPKB4d9gR3gISMC_Ak0ApCjFYy_oxhfC),每晚8点直播