any4any


Nameany4any JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
Summary大模型会话、对话内容预览与修改、语音识别、文本转语音、文档重排、文本嵌入、知识库系统和MCP服务的一键式API服务
upload_time2025-10-08 10:49:23
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT License Copyright (c) 2025 eogee Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords ai ml asr llm tts rerank embedding
VCS
bugtrack_url
requirements edge-tts torch torchaudio funasr fastapi uvicorn python-dotenv transformers FlagEmbedding pydantic mysql-connector-python FastMCP dingtalk_stream alibabacloud_dingtalk numpy sentence-transformers requests PyPDF2 python-docx chardet chromadb itsdangerous matplotlib omegaconf tqdm pyyaml deepspeed sentencepiece einops scipy soundfile packaging huggingface_hub WeTextProcessing wetext
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # any4any: 大模型会话、对话内容预览与修改、语音识别、文本转语音、文档重排、文本嵌入、知识库系统和MCP服务的一键式API服务

[![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/eogee/any4any)

<div align="center">
  中文简体 ·
  <a href="docs/README_EN.md">English</a>
</div>

## 功能特性

**核心功能**:启动运行本项目后,您可以将几乎所有类型模型以openai-api兼容接口形式暴露,可被任何模型管理应用添加,可追踪用户对话历史,具体功能模块介绍如下:

- 会话管理:支持多平台与LLM会话管的理,可将本地模型以openai-api兼容接口形式暴露,可被任何模型管理应用添加,可追踪用户对话历史
- 预览模式:支持LLM响应内容预览和编辑功能
- 钉钉机器人:支持钉钉机器人消息处理
- 语音转录:将音频文件转换为文本(支持多种语言)
- 文本转语音:将文本转换为语音文件(支持多种语音风格):默认使用`zh-CN-XiaoyiNeural`音色
- 知识库:提供独立的embbeding和rerank能力,可基于ChromaDB向量数据库构建知识库系统
- MCP服务:支持构建MCP工具、接口,可在任意MCP客户端调用
- API文档:自动生成API使用说明,可通过浏览器访问:http://localhost:8888/docs#/

## 更新内容

**2025.10.08(V0.1.1):新增嵌入模型(Embedding)模块**

新增:
- Embedding模块:完整的嵌入模型支持,包括文档处理、向量存储、检索引擎等功能
- 文档处理:支持文档解析、分块、向量化等处理流程
- 向量存储:高效的向量存储和管理机制
- 检索引擎:基于相似度的文档检索功能
- 知识库服务器:提供知识库的创建、管理和查询服务
- OpenAI API兼容接口:支持与OpenAI嵌入API一致的调用方式
- [知识库系统说明文档.md](./docs/zh/知识库系统说明文档.md)

**2025.9.26(V0.1.0):新增会话管理和预览模式功能**

新增:
- 会话管理:支持多平台会话管理,可追踪用户对话历史,实现上下文连续对话
- 预览模式:支持内容预览和编辑功能,用户可在内容生成后进行预览和修改,浏览器访问:http://localhost:8888/index/ 可进行预览
- 钉钉机器人集成:支持钉钉机器人消息处理,可在钉钉中与系统交互
- 用户认证增强:增加了基于API密钥的认证机制,提高系统安全性
- 数据库会话存储:将会话数据存储到MySQL数据库,支持持久化和查询
- [会话管理系统说明文档.md](./docs/zh/会话管理系统说明文档.md)

更新:
- 重塑了项目结构,新增data_models模块用于管理数据模型,新增servers模块用于管理服务,新增static目录用于管理静态文件

**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工作流文件:[mcp_test.yml](./workflows/dify_workflows/mcp_test.yml)

## 前置环境要求

- WSL2 (Windows Subsystem for Linux):Windows系统下的必要条件
- Conda (Anaconda or Miniconda):用于管理Python环境
- Docker-desktop:Windows系统下的Docker桌面应用,用于运行dify服务
- MySQL:用于存储会话数据

## 安装指南

### 1.克隆本项目

```bash
git clone https://github.com/eogee/any4any.git
# 或
git clone https://gitee.com/eogee/any4any.git
# 或
git clone https://gitcode.com/eogee/any4any.git
```

你也可以通过网盘下载本项目:https://pan.quark.cn/s/fbe126d5bd75

### 2.下载模型

```bash
# 确认已安装git-lfs (https://git-lfs.com),用于下载大文件
# 您可在huggingface.co/modelscoup.com/hf-mirror.com站点中下载模型,此处以huggingface.co为例
git lfs install

# 下载语音识别模型:SenseVoiceSmall
git clone https://huggingface.co/FunAudioLLM/SenseVoiceSmall

# 下载重排序模型:bge-reranker-base
git clone https://huggingface.co/BAAI/bge-reranker-base

# 下载LLM模型:Qwen3-1.7B
git clone https://huggingface.co/Qwen/Qwen3-1.7B

# 下载Embedding模型:bge-small-zh-v1.5
git clone https://huggingface.co/BAAI/bge-small-zh-v1.5
```

### 3. 创建conda环境

```bash
# 创建conda环境
conda create -n any4any python=3.10
# 激活环境
conda activate any4any
```

### 4. 安装依赖

```bash
# 安装ffmpeg
sudo apt-get install ffmpeg
# 验证ffmpeg是否安装成功
ffmpeg -version
# 安装其他依赖
pip install -r requirements.txt
```

### 5. 配置环境变量

复制示例配置文件并根据需要修改:

```bash
cp .env.example .env
```

编辑`.env`文件,配置以下内容:
- 数据库连接信息
- 模型路径
- API密钥
- 其他自定义配置

### 6. 启动服务

```bash
# 直接启动服务
python cli.py

# 或使用快捷命令(WSL/Linux环境),永久安装a4a-run命令:
sudo cp a4a-run.sh /usr/local/bin/a4a-run
sudo chmod +x /usr/local/bin/a4a-run
# 安装后可直接使用:
a4a-run
```

服务将运行在以下端口:
- 主服务: http://localhost:8888
- MCP服务: http://localhost:9999
- 钉钉服务: http://localhost:6666

### 7. 其他模型平台应用内容添加并调用模型(此处以Dify为例子)

**7.1查看宿主机的ip地址**

在wsl命令行中执行`ifconfig`命令,查看宿主机的ip地址。
```bash
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.21.56.14  netmask 255.255.240.0  broadcast 172.21.63.255
```
其中`172.21.56.14`即为宿主机的ip地址。

**7.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
其他可空余不填
```

**7.3导入ASR模型**

配置模型路径:
```
#.env文件
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`
```

**7.4导入Rerank模型**

配置模型路径:
```
#.env文件 
RERANK_MODEL_DIR=/mnt/c/models/bge-reranker-base  # 替换为你本地rerank模型路径
```

同样打开`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`
```

**7.5导入LLM模型**

配置模型路径:
```
#.env文件
LLM_MODEL_DIR=/mnt/c/models/Qwen3-1.7B  # 替换为你本地LLM模型路径
```

同样打开`OpenAI-API-compatible`插件,点击`添加模型`,配置内容如下:
```
模型类型:LLM
模型名称:Qwen3-1.7B
API Key:EMPTY
API endpoint URL:`http://172.21.56.14:8888/v1` 或 `http://host.docker.internal:8888/v1`
```

**7.6导入Embbding模型**

配置模型路径:
```
#.env文件
EMBEDDING_MODEL_DIR = "/mnt/c/models/bge-small-zh-v1.5"  # 替换为你本地Embbding模型路径
```

同样打开`OpenAI-API-compatible`插件,点击`添加模型`,配置内容如下:
```
模型类型:Embbding
模型名称:bge-small-zh-v1.5
API Key:EMPTY
API endpoint URL:`http://172.21.56.14:8888/v1` 或 `http://host.docker.internal:8888/v1`
```

**7.7设置为默认模型**

在右上角`系统模型设置`中的最下方,将`文本转语音模型`设置为`edge-tts`,将`语音识别模型`设置为`SenseVoiceSmall`,将`文档重排模型`设置为`bge-reranker-base`,将`语言模型`设置为`Qwen3-1.7B`,将`嵌入模型`设置为`bge-small-zh-v1.5`,保存设置。

**7.8使用模型**

添加任意一个`chatflow`,进入工作流内容后在右上角`功能`,找到`文字转语音`和`语音转文字`功能,配置我们添加好的模型,将`自动播放`打开,然后对话即可。

### 8. dify中连接MySQL数据库

**8.1连接配置**

在`.env`文件中配置MySQL数据库连接信息:
```
MYSQL_HOST=172.21.48.1  # 在cmd中使用ipconfig | findstr "IPv4" 查看并替换为你的实际的IP地址
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=any4any  # 替换为你的数据库名称
```

**8.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';
```

**8.3构建http请求**

在dify中的`workflow`或`chatflow`中添加`http请求节点`,配置信息如下:
```
请求方式:POST
请求地址:http://localhost:8888/v1/db/query
form-data参数名:query
form-data参数值:SELECT * FROM users LIMIT 1  # 示例查询语句
```

## 工程结构

```
any4any/
├── core/                     # 核心功能模块
│   ├── asr/                  # 语音识别模块
│   │   └── transcription.py  # 音频转录实现
│   ├── auth/                 # 认证模块
│   │   └── model_auth.py     # 模型认证实现
│   ├── chat/                 # 聊天相关模块
│   │   ├── conversation_database.py  # 会话数据库操作
│   │   ├── conversation_manager.py   # 会话管理器
│   │   ├── delay_manager.py          # 延迟管理器
│   │   ├── llm.py            # 大语言模型接口
│   │   ├── openai_api.py     # OpenAI API兼容接口
│   │   └── preview.py        # 预览功能实现
│   ├── database/             # 数据库模块
│   │   └── database.py       # 数据库连接和查询实现
│   ├── dingtalk/             # 钉钉机器人模块
│   │   └── message_manager.py # 钉钉消息处理
│   ├── embedding/           # 嵌入模型模块
│   │   ├── document_processor.py # 文档处理器
│   │   ├── embedding_manager.py  # 嵌入管理器
│   │   ├── kb_server.py          # 知识库服务器
│   │   ├── openai_api.py         # OpenAI API接口
│   │   ├── retrieval_engine.py   # 检索引擎
│   │   └── vector_store.py       # 向量存储
│   ├── lifespan.py           # 应用生命周期管理
│   ├── log.py                # 日志管理
│   ├── mcp/                  # MCP协议模块
│   │   └── mcp_tools.py      # MCP工具实现
│   ├── rerank/               # 文档重排模块
│   │   └── rerank.py         # 文档重排实现
│   ├── tts/                  # 文本转语音模块
│   │   ├── file.py           # 音频文件处理
│   │   └── speech.py         # 语音合成实现
│   └── model_manager.py      # 模型管理器
├── data_models/              # 数据模型定义
├── servers/                  # 服务器模块
├── static/                   # 静态资源文件
├── utils/                    # 工具模块
├── workflows/                # 工作流和外部衔接插件
├── app.py                    # 应用入口文件
├── cli.py                    # 命令行接口
├── config.py                 # 配置文件
├── requirements.txt          # 依赖包列表
├── any4any.sql               # 数据库初始化脚本
├── a4a-run.sh                # 启动脚本
└── .env.example              # 环境变量示例文件

```

## 相关开源项目

- edge-tts:https://github.com/rany2/edge-tts
- SenseVoice:https://github.com/FunAudioLLM/SenseVoice
- bge-reranker-base:https://huggingface.co/BAAI/bge-reranker-base
- bge-small-zh-v1.5:https://huggingface.co/BAAI/bge-small-zh-v1.5
- dify:https://github.com/langgenius/dify
- fastapi:https://github.com/fastapi/fastapi
- Qwen3-1.7B:https://huggingface.co/Qwen/Qwen3-1.7B
- Layui:https://github.com/layui/layui
- font-awesome:https://github.com/FortAwesome/Font-Awesome

## 更新计划
- 增强会话管理功能
- 支持更多大语言模型
- 接入更多即时通讯服务商
- 增强前端界面,提供更友好的用户体验
- 增加更多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点直播

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "any4any",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "AI, ML, ASR, LLM, TTS, RERANK, EMBEDDING",
    "author": null,
    "author_email": "eogee <eogee@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/40/a6/9194c907b29e4361a0fcbf5f98b53a70e466668e4837734a54c5398a5956/any4any-0.1.1.tar.gz",
    "platform": null,
    "description": "# any4any: \u5927\u6a21\u578b\u4f1a\u8bdd\u3001\u5bf9\u8bdd\u5185\u5bb9\u9884\u89c8\u4e0e\u4fee\u6539\u3001\u8bed\u97f3\u8bc6\u522b\u3001\u6587\u672c\u8f6c\u8bed\u97f3\u3001\u6587\u6863\u91cd\u6392\u3001\u6587\u672c\u5d4c\u5165\u3001\u77e5\u8bc6\u5e93\u7cfb\u7edf\u548cMCP\u670d\u52a1\u7684\u4e00\u952e\u5f0fAPI\u670d\u52a1\n\n[![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/eogee/any4any)\n\n<div align=\"center\">\n  \u4e2d\u6587\u7b80\u4f53 \u00b7\n  <a href=\"docs/README_EN.md\">English</a>\n</div>\n\n## \u529f\u80fd\u7279\u6027\n\n**\u6838\u5fc3\u529f\u80fd**\uff1a\u542f\u52a8\u8fd0\u884c\u672c\u9879\u76ee\u540e\uff0c\u60a8\u53ef\u4ee5\u5c06\u51e0\u4e4e\u6240\u6709\u7c7b\u578b\u6a21\u578b\u4ee5openai-api\u517c\u5bb9\u63a5\u53e3\u5f62\u5f0f\u66b4\u9732\uff0c\u53ef\u88ab\u4efb\u4f55\u6a21\u578b\u7ba1\u7406\u5e94\u7528\u6dfb\u52a0\uff0c\u53ef\u8ffd\u8e2a\u7528\u6237\u5bf9\u8bdd\u5386\u53f2\uff0c\u5177\u4f53\u529f\u80fd\u6a21\u5757\u4ecb\u7ecd\u5982\u4e0b\uff1a\n\n- \u4f1a\u8bdd\u7ba1\u7406\uff1a\u652f\u6301\u591a\u5e73\u53f0\u4e0eLLM\u4f1a\u8bdd\u7ba1\u7684\u7406\uff0c\u53ef\u5c06\u672c\u5730\u6a21\u578b\u4ee5openai-api\u517c\u5bb9\u63a5\u53e3\u5f62\u5f0f\u66b4\u9732\uff0c\u53ef\u88ab\u4efb\u4f55\u6a21\u578b\u7ba1\u7406\u5e94\u7528\u6dfb\u52a0\uff0c\u53ef\u8ffd\u8e2a\u7528\u6237\u5bf9\u8bdd\u5386\u53f2\n- \u9884\u89c8\u6a21\u5f0f\uff1a\u652f\u6301LLM\u54cd\u5e94\u5185\u5bb9\u9884\u89c8\u548c\u7f16\u8f91\u529f\u80fd\n- \u9489\u9489\u673a\u5668\u4eba\uff1a\u652f\u6301\u9489\u9489\u673a\u5668\u4eba\u6d88\u606f\u5904\u7406\n- \u8bed\u97f3\u8f6c\u5f55\uff1a\u5c06\u97f3\u9891\u6587\u4ef6\u8f6c\u6362\u4e3a\u6587\u672c\uff08\u652f\u6301\u591a\u79cd\u8bed\u8a00\uff09\n- \u6587\u672c\u8f6c\u8bed\u97f3\uff1a\u5c06\u6587\u672c\u8f6c\u6362\u4e3a\u8bed\u97f3\u6587\u4ef6\uff08\u652f\u6301\u591a\u79cd\u8bed\u97f3\u98ce\u683c\uff09\uff1a\u9ed8\u8ba4\u4f7f\u7528`zh-CN-XiaoyiNeural`\u97f3\u8272\n- \u77e5\u8bc6\u5e93\uff1a\u63d0\u4f9b\u72ec\u7acb\u7684embbeding\u548crerank\u80fd\u529b\uff0c\u53ef\u57fa\u4e8eChromaDB\u5411\u91cf\u6570\u636e\u5e93\u6784\u5efa\u77e5\u8bc6\u5e93\u7cfb\u7edf\n- MCP\u670d\u52a1\uff1a\u652f\u6301\u6784\u5efaMCP\u5de5\u5177\u3001\u63a5\u53e3\uff0c\u53ef\u5728\u4efb\u610fMCP\u5ba2\u6237\u7aef\u8c03\u7528\n- API\u6587\u6863\uff1a\u81ea\u52a8\u751f\u6210API\u4f7f\u7528\u8bf4\u660e\uff0c\u53ef\u901a\u8fc7\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1ahttp://localhost:8888/docs#/\n\n## \u66f4\u65b0\u5185\u5bb9\n\n**2025.10.08(V0.1.1)\uff1a\u65b0\u589e\u5d4c\u5165\u6a21\u578b\uff08Embedding\uff09\u6a21\u5757**\n\n\u65b0\u589e\uff1a\n- Embedding\u6a21\u5757\uff1a\u5b8c\u6574\u7684\u5d4c\u5165\u6a21\u578b\u652f\u6301\uff0c\u5305\u62ec\u6587\u6863\u5904\u7406\u3001\u5411\u91cf\u5b58\u50a8\u3001\u68c0\u7d22\u5f15\u64ce\u7b49\u529f\u80fd\n- \u6587\u6863\u5904\u7406\uff1a\u652f\u6301\u6587\u6863\u89e3\u6790\u3001\u5206\u5757\u3001\u5411\u91cf\u5316\u7b49\u5904\u7406\u6d41\u7a0b\n- \u5411\u91cf\u5b58\u50a8\uff1a\u9ad8\u6548\u7684\u5411\u91cf\u5b58\u50a8\u548c\u7ba1\u7406\u673a\u5236\n- \u68c0\u7d22\u5f15\u64ce\uff1a\u57fa\u4e8e\u76f8\u4f3c\u5ea6\u7684\u6587\u6863\u68c0\u7d22\u529f\u80fd\n- \u77e5\u8bc6\u5e93\u670d\u52a1\u5668\uff1a\u63d0\u4f9b\u77e5\u8bc6\u5e93\u7684\u521b\u5efa\u3001\u7ba1\u7406\u548c\u67e5\u8be2\u670d\u52a1\n- OpenAI API\u517c\u5bb9\u63a5\u53e3\uff1a\u652f\u6301\u4e0eOpenAI\u5d4c\u5165API\u4e00\u81f4\u7684\u8c03\u7528\u65b9\u5f0f\n- [\u77e5\u8bc6\u5e93\u7cfb\u7edf\u8bf4\u660e\u6587\u6863.md](./docs/zh/\u77e5\u8bc6\u5e93\u7cfb\u7edf\u8bf4\u660e\u6587\u6863.md)\n\n**2025.9.26(V0.1.0)\uff1a\u65b0\u589e\u4f1a\u8bdd\u7ba1\u7406\u548c\u9884\u89c8\u6a21\u5f0f\u529f\u80fd**\n\n\u65b0\u589e\uff1a\n- \u4f1a\u8bdd\u7ba1\u7406\uff1a\u652f\u6301\u591a\u5e73\u53f0\u4f1a\u8bdd\u7ba1\u7406\uff0c\u53ef\u8ffd\u8e2a\u7528\u6237\u5bf9\u8bdd\u5386\u53f2\uff0c\u5b9e\u73b0\u4e0a\u4e0b\u6587\u8fde\u7eed\u5bf9\u8bdd\n- \u9884\u89c8\u6a21\u5f0f\uff1a\u652f\u6301\u5185\u5bb9\u9884\u89c8\u548c\u7f16\u8f91\u529f\u80fd\uff0c\u7528\u6237\u53ef\u5728\u5185\u5bb9\u751f\u6210\u540e\u8fdb\u884c\u9884\u89c8\u548c\u4fee\u6539\uff0c\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1ahttp://localhost:8888/index/ \u53ef\u8fdb\u884c\u9884\u89c8\n- \u9489\u9489\u673a\u5668\u4eba\u96c6\u6210\uff1a\u652f\u6301\u9489\u9489\u673a\u5668\u4eba\u6d88\u606f\u5904\u7406\uff0c\u53ef\u5728\u9489\u9489\u4e2d\u4e0e\u7cfb\u7edf\u4ea4\u4e92\n- \u7528\u6237\u8ba4\u8bc1\u589e\u5f3a\uff1a\u589e\u52a0\u4e86\u57fa\u4e8eAPI\u5bc6\u94a5\u7684\u8ba4\u8bc1\u673a\u5236\uff0c\u63d0\u9ad8\u7cfb\u7edf\u5b89\u5168\u6027\n- \u6570\u636e\u5e93\u4f1a\u8bdd\u5b58\u50a8\uff1a\u5c06\u4f1a\u8bdd\u6570\u636e\u5b58\u50a8\u5230MySQL\u6570\u636e\u5e93\uff0c\u652f\u6301\u6301\u4e45\u5316\u548c\u67e5\u8be2\n- [\u4f1a\u8bdd\u7ba1\u7406\u7cfb\u7edf\u8bf4\u660e\u6587\u6863.md](./docs/zh/\u4f1a\u8bdd\u7ba1\u7406\u7cfb\u7edf\u8bf4\u660e\u6587\u6863.md)\n\n\u66f4\u65b0\uff1a\n- \u91cd\u5851\u4e86\u9879\u76ee\u7ed3\u6784\uff0c\u65b0\u589edata_models\u6a21\u5757\u7528\u4e8e\u7ba1\u7406\u6570\u636e\u6a21\u578b\uff0c\u65b0\u589eservers\u6a21\u5757\u7528\u4e8e\u7ba1\u7406\u670d\u52a1\uff0c\u65b0\u589estatic\u76ee\u5f55\u7528\u4e8e\u7ba1\u7406\u9759\u6001\u6587\u4ef6\n\n**2025.5.24(V0.0.6)\uff1a\u65b0\u589e\u652f\u6301\u6784\u5efaMCP\u670d\u52a1**\n\n\u65b0\u589e\uff1a\n- MCP\u5de5\u5177\u6784\u5efa\uff1a\u53ef\u5728`core/mcp_tools.py`\u4e2d\u4efb\u610f\u6dfb\u52a0MCP\u5de5\u5177\uff0c\u9ed8\u8ba4\u63d0\u4f9b\u4e86\u4e24\u4e2a\u6574\u6570\u7684\u52a0\u3001\u51cf\u3001\u4e58\u548c\u9664\u7684\u8ba1\u7b97\n- MCP\u5de5\u5177\u6ce8\u518c\uff1a\u5728`app.py`\u4e2d\u5f15\u5165\u5bf9\u5e94\u7684\u6a21\u5757\uff0c\u5982`from core.mcp_tools import add, sub, mul, div`\uff0c\u5e76\u5728`mcp.tool()`\u51fd\u6570\u4e2d\u6ce8\u518c\n- MCP\u670d\u52a1\u670d\u52a1\u542f\u52a8\uff1a\u8fd0\u884c\u542f\u52a8\u547d\u4ee4\uff1a`python cli.py`\u6216`a4a-run`\uff0c\u670d\u52a1\u5c06\u8fd0\u884c\u5728: http://localhost:9999/sse\n\ndify\u5de5\u4f5c\u6d41\u6587\u4ef6:[mcp_test.yml](./workflows/dify_workflows/mcp_test.yml)\n\n## \u524d\u7f6e\u73af\u5883\u8981\u6c42\n\n- WSL2 (Windows Subsystem for Linux)\uff1aWindows\u7cfb\u7edf\u4e0b\u7684\u5fc5\u8981\u6761\u4ef6\n- Conda (Anaconda or Miniconda)\uff1a\u7528\u4e8e\u7ba1\u7406Python\u73af\u5883\n- Docker-desktop\uff1aWindows\u7cfb\u7edf\u4e0b\u7684Docker\u684c\u9762\u5e94\u7528\uff0c\u7528\u4e8e\u8fd0\u884cdify\u670d\u52a1\n- MySQL\uff1a\u7528\u4e8e\u5b58\u50a8\u4f1a\u8bdd\u6570\u636e\n\n## \u5b89\u88c5\u6307\u5357\n\n### 1.\u514b\u9686\u672c\u9879\u76ee\n\n```bash\ngit clone https://github.com/eogee/any4any.git\n# \u6216\ngit clone https://gitee.com/eogee/any4any.git\n# \u6216\ngit clone https://gitcode.com/eogee/any4any.git\n```\n\n\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7f51\u76d8\u4e0b\u8f7d\u672c\u9879\u76ee\uff1ahttps://pan.quark.cn/s/fbe126d5bd75\n\n### 2.\u4e0b\u8f7d\u6a21\u578b\n\n```bash\n# \u786e\u8ba4\u5df2\u5b89\u88c5git-lfs (https://git-lfs.com)\uff0c\u7528\u4e8e\u4e0b\u8f7d\u5927\u6587\u4ef6\n# \u60a8\u53ef\u5728huggingface.co/modelscoup.com/hf-mirror.com\u7ad9\u70b9\u4e2d\u4e0b\u8f7d\u6a21\u578b\uff0c\u6b64\u5904\u4ee5huggingface.co\u4e3a\u4f8b\ngit lfs install\n\n# \u4e0b\u8f7d\u8bed\u97f3\u8bc6\u522b\u6a21\u578b\uff1aSenseVoiceSmall\ngit clone https://huggingface.co/FunAudioLLM/SenseVoiceSmall\n\n# \u4e0b\u8f7d\u91cd\u6392\u5e8f\u6a21\u578b\uff1abge-reranker-base\ngit clone https://huggingface.co/BAAI/bge-reranker-base\n\n# \u4e0b\u8f7dLLM\u6a21\u578b\uff1aQwen3-1.7B\ngit clone https://huggingface.co/Qwen/Qwen3-1.7B\n\n# \u4e0b\u8f7dEmbedding\u6a21\u578b\uff1abge-small-zh-v1.5\ngit clone https://huggingface.co/BAAI/bge-small-zh-v1.5\n```\n\n### 3. \u521b\u5efaconda\u73af\u5883\n\n```bash\n# \u521b\u5efaconda\u73af\u5883\nconda create -n any4any python=3.10\n# \u6fc0\u6d3b\u73af\u5883\nconda activate any4any\n```\n\n### 4. \u5b89\u88c5\u4f9d\u8d56\n\n```bash\n# \u5b89\u88c5ffmpeg\nsudo apt-get install ffmpeg\n# \u9a8c\u8bc1ffmpeg\u662f\u5426\u5b89\u88c5\u6210\u529f\nffmpeg -version\n# \u5b89\u88c5\u5176\u4ed6\u4f9d\u8d56\npip install -r requirements.txt\n```\n\n### 5. \u914d\u7f6e\u73af\u5883\u53d8\u91cf\n\n\u590d\u5236\u793a\u4f8b\u914d\u7f6e\u6587\u4ef6\u5e76\u6839\u636e\u9700\u8981\u4fee\u6539\uff1a\n\n```bash\ncp .env.example .env\n```\n\n\u7f16\u8f91`.env`\u6587\u4ef6\uff0c\u914d\u7f6e\u4ee5\u4e0b\u5185\u5bb9\uff1a\n- \u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f\n- \u6a21\u578b\u8def\u5f84\n- API\u5bc6\u94a5\n- \u5176\u4ed6\u81ea\u5b9a\u4e49\u914d\u7f6e\n\n### 6. \u542f\u52a8\u670d\u52a1\n\n```bash\n# \u76f4\u63a5\u542f\u52a8\u670d\u52a1\npython cli.py\n\n# \u6216\u4f7f\u7528\u5feb\u6377\u547d\u4ee4(WSL/Linux\u73af\u5883),\u6c38\u4e45\u5b89\u88c5a4a-run\u547d\u4ee4:\nsudo cp a4a-run.sh /usr/local/bin/a4a-run\nsudo chmod +x /usr/local/bin/a4a-run\n# \u5b89\u88c5\u540e\u53ef\u76f4\u63a5\u4f7f\u7528:\na4a-run\n```\n\n\u670d\u52a1\u5c06\u8fd0\u884c\u5728\u4ee5\u4e0b\u7aef\u53e3\uff1a\n- \u4e3b\u670d\u52a1: http://localhost:8888\n- MCP\u670d\u52a1: http://localhost:9999\n- \u9489\u9489\u670d\u52a1: http://localhost:6666\n\n### 7. \u5176\u4ed6\u6a21\u578b\u5e73\u53f0\u5e94\u7528\u5185\u5bb9\u6dfb\u52a0\u5e76\u8c03\u7528\u6a21\u578b\uff08\u6b64\u5904\u4ee5Dify\u4e3a\u4f8b\u5b50\uff09\n\n**7.1\u67e5\u770b\u5bbf\u4e3b\u673a\u7684ip\u5730\u5740**\n\n\u5728wsl\u547d\u4ee4\u884c\u4e2d\u6267\u884c`ifconfig`\u547d\u4ee4\uff0c\u67e5\u770b\u5bbf\u4e3b\u673a\u7684ip\u5730\u5740\u3002\n```bash\neth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500\n        inet 172.21.56.14  netmask 255.255.240.0  broadcast 172.21.63.255\n```\n\u5176\u4e2d`172.21.56.14`\u5373\u4e3a\u5bbf\u4e3b\u673a\u7684ip\u5730\u5740\u3002\n\n**7.2\u5bfc\u5165TTS\u6a21\u578b**\n\n\u542f\u52a8Docker\u5e76\u4fdd\u8bc1dify\u670d\u52a1\u6b63\u5e38\u8fd0\u884c\u3002\n\u5c06\u63d2\u4ef6`langgenius-openai_api_compatible_0.0.16.difypkg`\u5bfc\u5165\u5e76\u5b89\u88c5\u81f3dify\u4e2d\u3002\n\u6253\u5f00`OpenAI-API-compatible`\u63d2\u4ef6\uff0c\u70b9\u51fb`\u6dfb\u52a0\u6a21\u578b`\uff0c\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\uff1a\n```\n\u6a21\u578b\u7c7b\u578b\uff1aTTS\n\u6a21\u578b\u540d\u79f0\uff1aedge-tts\nAPI endpoint URL\uff1a`http://172.21.56.14:8888/v1` \u6216 `http://host.docker.internal:8888/v1`\nAPI Key\uff1aEMPTY\n\u53ef\u7528\u58f0\u97f3\uff08\u7528\u82f1\u6587\u9017\u53f7\u5206\u9694\uff09\uff1azh-CN-XiaoyiNeural\n\u5176\u4ed6\u53ef\u7a7a\u4f59\u4e0d\u586b\n```\n\n**7.3\u5bfc\u5165ASR\u6a21\u578b**\n\n\u914d\u7f6e\u6a21\u578b\u8def\u5f84\uff1a\n```\n#.env\u6587\u4ef6\nASR_MODEL_DIR=/mnt/c/models/SenseVoiceSmall  # \u66ff\u6362\u4e3a\u4f60\u672c\u5730ASR\u6a21\u578b\u8def\u5f84\n```\n\n\u6253\u5f00`OpenAI-API-compatible`\u63d2\u4ef6\uff0c\u70b9\u51fb`\u6dfb\u52a0\u6a21\u578b`\uff0c\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\uff1a\n```\n\u6a21\u578b\u7c7b\u578b\uff1aSpeech2text\n\u6a21\u578b\u540d\u79f0\uff1aSenseVoiceSmall\nAPI Key\uff1aEMPTY\nAPI endpoint URL\uff1a`http://172.21.56.14:8888/v1` \u6216 `http://host.docker.internal:8888/v1`\n```\n\n**7.4\u5bfc\u5165Rerank\u6a21\u578b**\n\n\u914d\u7f6e\u6a21\u578b\u8def\u5f84\uff1a\n```\n#.env\u6587\u4ef6 \nRERANK_MODEL_DIR=/mnt/c/models/bge-reranker-base  # \u66ff\u6362\u4e3a\u4f60\u672c\u5730rerank\u6a21\u578b\u8def\u5f84\n```\n\n\u540c\u6837\u6253\u5f00`OpenAI-API-compatible`\u63d2\u4ef6\uff0c\u70b9\u51fb`\u6dfb\u52a0\u6a21\u578b`\uff0c\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\uff1a\n```\n\u6a21\u578b\u7c7b\u578b\uff1arerank\n\u6a21\u578b\u540d\u79f0\uff1abge-reranker-base\nAPI Key\uff1aEMPTY\nAPI endpoint URL\uff1a`http://172.21.56.14:8888/v1` \u6216 `http://host.docker.internal:8888/v1`\n```\n\n**7.5\u5bfc\u5165LLM\u6a21\u578b**\n\n\u914d\u7f6e\u6a21\u578b\u8def\u5f84\uff1a\n```\n#.env\u6587\u4ef6\nLLM_MODEL_DIR=/mnt/c/models/Qwen3-1.7B  # \u66ff\u6362\u4e3a\u4f60\u672c\u5730LLM\u6a21\u578b\u8def\u5f84\n```\n\n\u540c\u6837\u6253\u5f00`OpenAI-API-compatible`\u63d2\u4ef6\uff0c\u70b9\u51fb`\u6dfb\u52a0\u6a21\u578b`\uff0c\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\uff1a\n```\n\u6a21\u578b\u7c7b\u578b\uff1aLLM\n\u6a21\u578b\u540d\u79f0\uff1aQwen3-1.7B\nAPI Key\uff1aEMPTY\nAPI endpoint URL\uff1a`http://172.21.56.14:8888/v1` \u6216 `http://host.docker.internal:8888/v1`\n```\n\n**7.6\u5bfc\u5165Embbding\u6a21\u578b**\n\n\u914d\u7f6e\u6a21\u578b\u8def\u5f84\uff1a\n```\n#.env\u6587\u4ef6\nEMBEDDING_MODEL_DIR = \"/mnt/c/models/bge-small-zh-v1.5\"  # \u66ff\u6362\u4e3a\u4f60\u672c\u5730Embbding\u6a21\u578b\u8def\u5f84\n```\n\n\u540c\u6837\u6253\u5f00`OpenAI-API-compatible`\u63d2\u4ef6\uff0c\u70b9\u51fb`\u6dfb\u52a0\u6a21\u578b`\uff0c\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\uff1a\n```\n\u6a21\u578b\u7c7b\u578b\uff1aEmbbding\n\u6a21\u578b\u540d\u79f0\uff1abge-small-zh-v1.5\nAPI Key\uff1aEMPTY\nAPI endpoint URL\uff1a`http://172.21.56.14:8888/v1` \u6216 `http://host.docker.internal:8888/v1`\n```\n\n**7.7\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u6a21\u578b**\n\n\u5728\u53f3\u4e0a\u89d2`\u7cfb\u7edf\u6a21\u578b\u8bbe\u7f6e`\u4e2d\u7684\u6700\u4e0b\u65b9\uff0c\u5c06`\u6587\u672c\u8f6c\u8bed\u97f3\u6a21\u578b`\u8bbe\u7f6e\u4e3a`edge-tts`\uff0c\u5c06`\u8bed\u97f3\u8bc6\u522b\u6a21\u578b`\u8bbe\u7f6e\u4e3a`SenseVoiceSmall`\uff0c\u5c06`\u6587\u6863\u91cd\u6392\u6a21\u578b`\u8bbe\u7f6e\u4e3a`bge-reranker-base`\uff0c\u5c06`\u8bed\u8a00\u6a21\u578b`\u8bbe\u7f6e\u4e3a`Qwen3-1.7B`\uff0c\u5c06`\u5d4c\u5165\u6a21\u578b`\u8bbe\u7f6e\u4e3a`bge-small-zh-v1.5`\uff0c\u4fdd\u5b58\u8bbe\u7f6e\u3002\n\n**7.8\u4f7f\u7528\u6a21\u578b**\n\n\u6dfb\u52a0\u4efb\u610f\u4e00\u4e2a`chatflow`\uff0c\u8fdb\u5165\u5de5\u4f5c\u6d41\u5185\u5bb9\u540e\u5728\u53f3\u4e0a\u89d2`\u529f\u80fd`\uff0c\u627e\u5230`\u6587\u5b57\u8f6c\u8bed\u97f3`\u548c`\u8bed\u97f3\u8f6c\u6587\u5b57`\u529f\u80fd\uff0c\u914d\u7f6e\u6211\u4eec\u6dfb\u52a0\u597d\u7684\u6a21\u578b\uff0c\u5c06`\u81ea\u52a8\u64ad\u653e`\u6253\u5f00\uff0c\u7136\u540e\u5bf9\u8bdd\u5373\u53ef\u3002\n\n### 8. dify\u4e2d\u8fde\u63a5MySQL\u6570\u636e\u5e93\n\n**8.1\u8fde\u63a5\u914d\u7f6e**\n\n\u5728`.env`\u6587\u4ef6\u4e2d\u914d\u7f6eMySQL\u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f:\n```\nMYSQL_HOST=172.21.48.1  # \u5728cmd\u4e2d\u4f7f\u7528ipconfig | findstr \"IPv4\" \u67e5\u770b\u5e76\u66ff\u6362\u4e3a\u4f60\u7684\u5b9e\u9645\u7684IP\u5730\u5740\nMYSQL_PORT=3306\nMYSQL_USER=root\nMYSQL_PASSWORD=root\nMYSQL_DATABASE=any4any  # \u66ff\u6362\u4e3a\u4f60\u7684\u6570\u636e\u5e93\u540d\u79f0\n```\n\n**8.2MySQL\u6570\u636e\u5e93\u914d\u7f6e**\n\n\u5728MySQL\u670d\u52a1\u4e2d\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u5141\u8bb8wsl\u4e2d\u7684\u5bbf\u4e3b\u673a\uff08172.21.56.14\uff09\u8bbf\u95ee\u6570\u636e\u5e93\uff1a\n```mysql\n-- \u5141\u8bb8 wsl\u4e2d\u7684\u5bbf\u4e3b\u673a\uff08172.21.56.14\uff09\u8bbf\u95ee\u6570\u636e\u5e93 \u4f7f\u7528 root \u7528\u6237\u8fde\u63a5\u6240\u6709\u6570\u636e\u5e93\uff08*.*\uff09\n-- YOUR_PASSWORD \u66ff\u6362\u4e3a\u4f60\u7684\u6570\u636e\u5e93\u5bc6\u7801\nGRANT ALL PRIVILEGES ON *.* TO 'root'@'172.21.56.14' IDENTIFIED BY 'YOUR_PASSWORD';\n\n-- \u5982\u679c MySQL 8.0+\uff0c\u53ef\u80fd\u9700\u8981\u5206\u5f00\u521b\u5efa\u7528\u6237\u5e76\u6388\u6743\nCREATE USER 'root'@'172.21.56.14' IDENTIFIED BY 'YOUR_PASSWORD';\nGRANT ALL PRIVILEGES ON *.* TO 'root'@'172.21.56.14';\n```\n\n**8.3\u6784\u5efahttp\u8bf7\u6c42**\n\n\u5728dify\u4e2d\u7684`workflow`\u6216`chatflow`\u4e2d\u6dfb\u52a0`http\u8bf7\u6c42\u8282\u70b9`\uff0c\u914d\u7f6e\u4fe1\u606f\u5982\u4e0b\uff1a\n```\n\u8bf7\u6c42\u65b9\u5f0f\uff1aPOST\n\u8bf7\u6c42\u5730\u5740\uff1ahttp://localhost:8888/v1/db/query\nform-data\u53c2\u6570\u540d\uff1aquery\nform-data\u53c2\u6570\u503c\uff1aSELECT * FROM users LIMIT 1  # \u793a\u4f8b\u67e5\u8be2\u8bed\u53e5\n```\n\n## \u5de5\u7a0b\u7ed3\u6784\n\n```\nany4any/\n\u251c\u2500\u2500 core/                     # \u6838\u5fc3\u529f\u80fd\u6a21\u5757\n\u2502   \u251c\u2500\u2500 asr/                  # \u8bed\u97f3\u8bc6\u522b\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 transcription.py  # \u97f3\u9891\u8f6c\u5f55\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 auth/                 # \u8ba4\u8bc1\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 model_auth.py     # \u6a21\u578b\u8ba4\u8bc1\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 chat/                 # \u804a\u5929\u76f8\u5173\u6a21\u5757\n\u2502   \u2502   \u251c\u2500\u2500 conversation_database.py  # \u4f1a\u8bdd\u6570\u636e\u5e93\u64cd\u4f5c\n\u2502   \u2502   \u251c\u2500\u2500 conversation_manager.py   # \u4f1a\u8bdd\u7ba1\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 delay_manager.py          # \u5ef6\u8fdf\u7ba1\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 llm.py            # \u5927\u8bed\u8a00\u6a21\u578b\u63a5\u53e3\n\u2502   \u2502   \u251c\u2500\u2500 openai_api.py     # OpenAI API\u517c\u5bb9\u63a5\u53e3\n\u2502   \u2502   \u2514\u2500\u2500 preview.py        # \u9884\u89c8\u529f\u80fd\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 database/             # \u6570\u636e\u5e93\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 database.py       # \u6570\u636e\u5e93\u8fde\u63a5\u548c\u67e5\u8be2\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 dingtalk/             # \u9489\u9489\u673a\u5668\u4eba\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 message_manager.py # \u9489\u9489\u6d88\u606f\u5904\u7406\n\u2502   \u251c\u2500\u2500 embedding/           # \u5d4c\u5165\u6a21\u578b\u6a21\u5757\n\u2502   \u2502   \u251c\u2500\u2500 document_processor.py # \u6587\u6863\u5904\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 embedding_manager.py  # \u5d4c\u5165\u7ba1\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 kb_server.py          # \u77e5\u8bc6\u5e93\u670d\u52a1\u5668\n\u2502   \u2502   \u251c\u2500\u2500 openai_api.py         # OpenAI API\u63a5\u53e3\n\u2502   \u2502   \u251c\u2500\u2500 retrieval_engine.py   # \u68c0\u7d22\u5f15\u64ce\n\u2502   \u2502   \u2514\u2500\u2500 vector_store.py       # \u5411\u91cf\u5b58\u50a8\n\u2502   \u251c\u2500\u2500 lifespan.py           # \u5e94\u7528\u751f\u547d\u5468\u671f\u7ba1\u7406\n\u2502   \u251c\u2500\u2500 log.py                # \u65e5\u5fd7\u7ba1\u7406\n\u2502   \u251c\u2500\u2500 mcp/                  # MCP\u534f\u8bae\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 mcp_tools.py      # MCP\u5de5\u5177\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 rerank/               # \u6587\u6863\u91cd\u6392\u6a21\u5757\n\u2502   \u2502   \u2514\u2500\u2500 rerank.py         # \u6587\u6863\u91cd\u6392\u5b9e\u73b0\n\u2502   \u251c\u2500\u2500 tts/                  # \u6587\u672c\u8f6c\u8bed\u97f3\u6a21\u5757\n\u2502   \u2502   \u251c\u2500\u2500 file.py           # \u97f3\u9891\u6587\u4ef6\u5904\u7406\n\u2502   \u2502   \u2514\u2500\u2500 speech.py         # \u8bed\u97f3\u5408\u6210\u5b9e\u73b0\n\u2502   \u2514\u2500\u2500 model_manager.py      # \u6a21\u578b\u7ba1\u7406\u5668\n\u251c\u2500\u2500 data_models/              # \u6570\u636e\u6a21\u578b\u5b9a\u4e49\n\u251c\u2500\u2500 servers/                  # \u670d\u52a1\u5668\u6a21\u5757\n\u251c\u2500\u2500 static/                   # \u9759\u6001\u8d44\u6e90\u6587\u4ef6\n\u251c\u2500\u2500 utils/                    # \u5de5\u5177\u6a21\u5757\n\u251c\u2500\u2500 workflows/                # \u5de5\u4f5c\u6d41\u548c\u5916\u90e8\u8854\u63a5\u63d2\u4ef6\n\u251c\u2500\u2500 app.py                    # \u5e94\u7528\u5165\u53e3\u6587\u4ef6\n\u251c\u2500\u2500 cli.py                    # \u547d\u4ee4\u884c\u63a5\u53e3\n\u251c\u2500\u2500 config.py                 # \u914d\u7f6e\u6587\u4ef6\n\u251c\u2500\u2500 requirements.txt          # \u4f9d\u8d56\u5305\u5217\u8868\n\u251c\u2500\u2500 any4any.sql               # \u6570\u636e\u5e93\u521d\u59cb\u5316\u811a\u672c\n\u251c\u2500\u2500 a4a-run.sh                # \u542f\u52a8\u811a\u672c\n\u2514\u2500\u2500 .env.example              # \u73af\u5883\u53d8\u91cf\u793a\u4f8b\u6587\u4ef6\n\n```\n\n## \u76f8\u5173\u5f00\u6e90\u9879\u76ee\n\n- edge-tts\uff1ahttps://github.com/rany2/edge-tts\n- SenseVoice\uff1ahttps://github.com/FunAudioLLM/SenseVoice\n- bge-reranker-base\uff1ahttps://huggingface.co/BAAI/bge-reranker-base\n- bge-small-zh-v1.5\uff1ahttps://huggingface.co/BAAI/bge-small-zh-v1.5\n- dify\uff1ahttps://github.com/langgenius/dify\n- fastapi\uff1ahttps://github.com/fastapi/fastapi\n- Qwen3-1.7B\uff1ahttps://huggingface.co/Qwen/Qwen3-1.7B\n- Layui\uff1ahttps://github.com/layui/layui\n- font-awesome\uff1ahttps://github.com/FortAwesome/Font-Awesome\n\n## \u66f4\u65b0\u8ba1\u5212\n- \u589e\u5f3a\u4f1a\u8bdd\u7ba1\u7406\u529f\u80fd\n- \u652f\u6301\u66f4\u591a\u5927\u8bed\u8a00\u6a21\u578b\n- \u63a5\u5165\u66f4\u591a\u5373\u65f6\u901a\u8baf\u670d\u52a1\u5546\n- \u589e\u5f3a\u524d\u7aef\u754c\u9762\uff0c\u63d0\u4f9b\u66f4\u53cb\u597d\u7684\u7528\u6237\u4f53\u9a8c\n- \u589e\u52a0\u66f4\u591aTTS\u548cASR\u6a21\u578b\u7684\u652f\u6301\n- \u589e\u52a0\u5176\u4ed6\u63a5\u53e3\u548c\u670d\u52a1\n\n## \u8054\u7cfb\u6211\u4eec\n- \u5b98\u65b9\u7f51\u7ad9\uff1ahttps://eogee.com\n- \u90ae\u7bb1\uff1aeogee@qq.com\n- B\u7ad9\uff1ahttps://space.bilibili.com/315734619\n- \u6296\u97f3\uff1a[\u6296\u97f3eogee](https://www.douyin.com/user/MS4wLjABAAAAdH5__CXhFJtSrDQKNuI_vh4mI4-LdyQ_LPKB4d9gR3gISMC_Ak0ApCjFYy_oxhfC)\uff0c\u6bcf\u665a8\u70b9\u76f4\u64ad\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 eogee\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "\u5927\u6a21\u578b\u4f1a\u8bdd\u3001\u5bf9\u8bdd\u5185\u5bb9\u9884\u89c8\u4e0e\u4fee\u6539\u3001\u8bed\u97f3\u8bc6\u522b\u3001\u6587\u672c\u8f6c\u8bed\u97f3\u3001\u6587\u6863\u91cd\u6392\u3001\u6587\u672c\u5d4c\u5165\u3001\u77e5\u8bc6\u5e93\u7cfb\u7edf\u548cMCP\u670d\u52a1\u7684\u4e00\u952e\u5f0fAPI\u670d\u52a1",
    "version": "0.1.1",
    "project_urls": {
        "Documentation": "https://github.com/eogee/any4any/tree/master/docs",
        "Homepage": "https://eogee.com",
        "Issues": "https://github.com/eogee/any4any/issues",
        "Repository": "https://github.com/eogee/any4any",
        "Source": "https://github.com/eogee/any4any"
    },
    "split_keywords": [
        "ai",
        " ml",
        " asr",
        " llm",
        " tts",
        " rerank",
        " embedding"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ea4283c96e1d80a210e2b0a3d3d10e8f1640e530eb51b84bbdcb8fdd96fd51e8",
                "md5": "8d5442cf19318d179a9db49e363dbbb3",
                "sha256": "9c7c37f7d22914b369ecf8210fc5d9949cb04e2ac8b6ec372c1655ca23a614e2"
            },
            "downloads": -1,
            "filename": "any4any-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8d5442cf19318d179a9db49e363dbbb3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 179331,
            "upload_time": "2025-10-08T10:49:22",
            "upload_time_iso_8601": "2025-10-08T10:49:22.212632Z",
            "url": "https://files.pythonhosted.org/packages/ea/42/83c96e1d80a210e2b0a3d3d10e8f1640e530eb51b84bbdcb8fdd96fd51e8/any4any-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "40a69194c907b29e4361a0fcbf5f98b53a70e466668e4837734a54c5398a5956",
                "md5": "867a99725833231e521a154ab0aa9b75",
                "sha256": "708c49ba0d25f82bc54ac9be2ab7e542d86395747b9a0820cdcb734139f797c7"
            },
            "downloads": -1,
            "filename": "any4any-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "867a99725833231e521a154ab0aa9b75",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 149637,
            "upload_time": "2025-10-08T10:49:23",
            "upload_time_iso_8601": "2025-10-08T10:49:23.988222Z",
            "url": "https://files.pythonhosted.org/packages/40/a6/9194c907b29e4361a0fcbf5f98b53a70e466668e4837734a54c5398a5956/any4any-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-08 10:49:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "eogee",
    "github_project": "any4any",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "edge-tts",
            "specs": []
        },
        {
            "name": "torch",
            "specs": [
                [
                    "==",
                    "2.3"
                ]
            ]
        },
        {
            "name": "torchaudio",
            "specs": []
        },
        {
            "name": "funasr",
            "specs": [
                [
                    ">=",
                    "1.1.3"
                ]
            ]
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    ">=",
                    "0.111.1"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": []
        },
        {
            "name": "python-dotenv",
            "specs": []
        },
        {
            "name": "transformers",
            "specs": [
                [
                    "==",
                    "4.51.0"
                ]
            ]
        },
        {
            "name": "FlagEmbedding",
            "specs": [
                [
                    "==",
                    "1.2.3"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "mysql-connector-python",
            "specs": [
                [
                    ">=",
                    "8.1.0"
                ]
            ]
        },
        {
            "name": "FastMCP",
            "specs": []
        },
        {
            "name": "dingtalk_stream",
            "specs": []
        },
        {
            "name": "alibabacloud_dingtalk",
            "specs": []
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.21.0"
                ]
            ]
        },
        {
            "name": "sentence-transformers",
            "specs": [
                [
                    ">=",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.25.0"
                ]
            ]
        },
        {
            "name": "PyPDF2",
            "specs": [
                [
                    ">=",
                    "1.27.0"
                ]
            ]
        },
        {
            "name": "python-docx",
            "specs": [
                [
                    ">=",
                    "0.8.11"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    ">=",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "chromadb",
            "specs": [
                [
                    ">=",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "itsdangerous",
            "specs": [
                [
                    ">=",
                    "2.1.2"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": []
        },
        {
            "name": "omegaconf",
            "specs": []
        },
        {
            "name": "tqdm",
            "specs": []
        },
        {
            "name": "pyyaml",
            "specs": []
        },
        {
            "name": "deepspeed",
            "specs": []
        },
        {
            "name": "sentencepiece",
            "specs": []
        },
        {
            "name": "einops",
            "specs": []
        },
        {
            "name": "scipy",
            "specs": []
        },
        {
            "name": "soundfile",
            "specs": []
        },
        {
            "name": "packaging",
            "specs": []
        },
        {
            "name": "huggingface_hub",
            "specs": []
        },
        {
            "name": "WeTextProcessing",
            "specs": []
        },
        {
            "name": "wetext",
            "specs": []
        }
    ],
    "lcname": "any4any"
}
        
Elapsed time: 1.83857s