Code Semantic Service
README.md
# Code Semantic Service · 代码重构与语义提取
一个可自托管、也可直接调用的代码智能服务:**代码重构** + **代码语义提取**,同时提供 REST API、MCP Server、x402 付费接口三种接入方式。
核心逻辑不依赖任何前端框架,后端只有 FastAPI,推理走本地 Ollama,**没有大模型时自动降级为规则引擎**,保证服务永不 500。
## 在线试用
| 入口 | 地址 | 说明 |
|---|---|---|
| 交互页面 | https://ai-interview-coach-80785.app.workbuddy.host/code | 粘贴代码直接看重构结果 |
| MCP Server | https://ai-interview-coach-80785.app.workbuddy.host/mcp | Agent 可直接连接 |
| OpenAPI | https://ai-interview-coach-80785.app.workbuddy.host/openapi.public.json | 平台导入插件用 |
| 能力清单 | https://ai-interview-coach-80785.app.workbuddy.host/llms.txt | 给 Agent 读的纯文本说明 |
## 它解决什么问题
重构代码这件事,人做起来慢,用大模型直接做又不稳定:模型可能改掉业务逻辑、可能只给一段解释而不给完整代码、可能把缩进搞乱。
这个服务做了三件事来保证结果可用:
1. **只输出代码**,不夹带解释文字。提示词和输出清洗双管齐下,`refactor_code()` 返回的一定是可直接替换的代码。
2. **强制校验可运行性**。Python 代码会过一遍 `ast.parse`,语法不合法就退回原代码并说明原因,绝不返回一段跑不起来的"重构结果"。
3. **没有模型也能干活**。`fallback_refactor.py` 是纯规则引擎:`== None` → `is None`、清理未使用 import、统一缩进、补类型注解占位。机械改造语义等价,不会引入新 bug。
## 快速开始
### 方式一:MCP(推荐给 Agent)
任何支持 MCP 的客户端填这个地址即可,无需鉴权:
```json
{
"mcpServers": {
"code-semantic": {
"type": "http",
"url": "https://ai-interview-coach-80785.app.workbuddy.host/mcp"
}
}
}
```
提供的工具:
| 工具 | 作用 |
|---|---|
| `refactor_code(code, task?, language?)` | 按任务重构代码,返回完整代码 |
| `extract_semantic(code, language?)` | 提取函数/类/导入/调用的结构化摘要 |
| `start_interview(jd, level?, history?)` | 按岗位 JD 生成面试题 |
| `nwdaf_analytics(event_id, target_nf_type?)` | 5G NWDAF 网络分析查询 |
### 方式二:REST API
```bash
# 代码重构
curl -X POST https://ai-interview-coach-80785.app.workbuddy.host/api/code/refactor \
-H "Content-Type: application/json" \
-d '{"code":"def f(a):\n if a == None:\n return 0\n return a\n","language":"python"}'
```
```json
{
"result": "def f(a):\n if a is None:\n return 0\n return a\n",
"model": "deepseek-coder",
"language": "python",
"billable_units": 1,
"degraded": false,
"elapsed_ms": 842
}
```
`degraded=true` 表示当前环境没有大模型、结果由规则引擎产出——**服务不会假装模型可用**。
### 方式三:x402 付费调用(Agent 原生付费)
不需要注册、不需要 API Key、不需要预充值。请求先拿到报价,再用钱包签名支付:
```bash
# 1) 首次请求会收到 402 + PAYMENT-REQUIRED 报价头
curl -i -X POST https://ai-interview-coach-80785.app.workbuddy.host/paid/refactor \
-H "Content-Type: application/json" -d '{"code":"x=1"}'
# 2) 带上 X-PAYMENT 头重试即可拿到结果
curl -X POST https://ai-interview-coach-80785.app.workbuddy.host/paid/refactor \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64 支付载荷>" \
-d '{"code":"x=1"}'
```
发现文件:`/.well-known/x402`
## 本地运行
```bash
python -m venv .venv && .venv/Scripts/activate # Windows
pip install -r requirements.txt
# 可选:接本地大模型(不接则走规则引擎)
ollama pull deepseek-coder
export OLLAMA_MODEL=deepseek-coder
python run.py # 默认 8000 端口,读 PORT 环境变量
```
打开 http://127.0.0.1:8000/docs 看接口文档,或 http://127.0.0.1:8000/ 用交互页面。
### 环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
| `PORT` | 8000 | 监听端口 |
| `OLLAMA_HOST` | http://127.0.0.1:11434 | Ollama 地址 |
| `OLLAMA_MODEL` | deepseek-coder | 模型名 |
| `OLLAMA_TIMEOUT` | 120 | 推理超时(秒) |
| `ALLOW_DEGRADED` | 1 | 模型不可用时是否降级到规则引擎 |
| `X402_PAY_TO` | 空 | 收款地址,留空则付费接口不接单 |
## 项目结构
```
core/
main.py FastAPI 入口(/refactor /semantic /health)
refactor.py 重构核心:提示词、Ollama 调用、输出清洗、AST 校验
code_semantic.py 语义提取:AST 优先,正则降级(支持多语言)
fallback_refactor.py 规则引擎:无模型时的等价改造
models.py Pydantic 请求/响应模型
adapters/ 各平台上架适配层(fal.ai / x402 / ClawMart / 扣子 / TapLaunch)
tests/ 接口级测试,19 项
```
## 已知取巧与限制
- **不用 tree-sitter**。非 Python 语言走正则降级,精度不如 AST,但零编译依赖,部署省心。要更高精度可自行接 tree-sitter。
- **降级模式不做语义理解**。规则引擎只做机械等价的改造,重构质量远低于模型模式,所以响应里会明确标 `degraded=true`。
- **x402 端点不做本地验签**。签名验证交给链上/ facilitator,因为本地验签无法判断 nonce 是否已用,会漏掉重放攻击。
## License
MIT
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues