如何用 Qwen3-Coder 与 Milvus 在 ai-engineering-hub 跑通代码问答应用?
【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub
这篇文章的目标是在 ai-engineering-hub 仓库中从零跑通chat-with-code代码问答应用:把 Milvus 向量数据库装到本地,安装 Python 依赖,启动 Streamlit 应用,加载一个 GitHub 仓库,然后对仓库代码提问并拿到经过校验的回答。应用通过 OpenRouter 调用 Qwen3-Coder 模型生成答案,用 HuggingFace 的BAAI/bge-base-en-v1.5生成向量,并用 Cleanlab Codex 对回答做可信度校验。应用代码在 chat-with-code/app.py,操作依据来自 chat-with-code/README.md。
准备条件:环境与前置检查
项目 chat-with-code/pyproject.toml 声明的运行约束:
- Python
>=3.12 - 使用
uv管理依赖(项目自带uv.lock,README 给出的安装命令就是uv sync) - 关键依赖:
llama-index>=0.12.52及其 OpenRouter、Milvus、HuggingFace Embedding 子包,pymilvus>=2.5.14、streamlit>=1.47.0、cleanlab-codex>=1.0.25
开始前还需要准备:
- Docker:Milvus 以 Docker 容器方式安装启动;
- 两个 API Key:OpenRouter Key(调用 Qwen3-Coder)和 Cleanlab Codex Key(校验回答),应用侧边栏内提供了各自的获取入口链接,应用启动前先在侧边栏填写;
git可执行文件:点击 Load 后应用会克隆目标仓库到本地。
第一步:启动 Milvus 向量数据库
README 给出了官方安装脚本,先下载再启动。注意这两条命令的副作用:第一条从网络下载 Milvus 的standalone_embed.sh脚本,第二条会在本机用 Docker 启动 Milvus 容器,因此需要 Docker 已安装并在运行。
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh bash standalone_embed.sh start应用侧的连接目标是http://localhost:19530,见 app.py 中create_index函数:它创建dim=768、overwrite=True的 Milvus 集合,所以 standalone 服务需要在本机 19530 端口可用。
第二步:安装依赖并启动应用
在chat-with-code目录下同步依赖:
uv sync然后启动 Streamlit 应用:
streamlit run app.py在浏览器打开http://localhost:8501即可访问应用(README 给出的访问地址)。
首次使用:加载仓库并提问
在页面左侧边栏依次填写:
- Codex API Key(密码输入框);
- OpenRouter API Key(密码输入框);
- GitHub Repository URL:要提问的仓库地址。
点击Load后,应用依次执行(对应 app.py 中process_button分支):
- 用 Codex Key 初始化 Cleanlab Codex 项目(项目名
Chat-with-Code,并创建一个 access key); - 把仓库克隆到应用当前工作目录(若目录已存在则直接读取,不再克隆);
- 按文件类型切分:
.md用 Markdown 解析器;.py、.ipynb按 Python 解析;.js按 JavaScript 解析;.ts按 TypeScript 解析; - 将向量索引用
BAAI/bge-base-en-v1.5的嵌入写入 Milvus; - 以
qwen/qwen3-coder:free作为 LLM(max_tokens=1024),用similarity_top_k=4和流式输出构建查询引擎。
加载完成后,在页面下方的输入框提问。每个回答以流式方式输出,答案下方显示Trust Score,并带一个状态标记(逻辑见 chat-with-code/validation.py):
- 分数 ≥ 0.8:绿色标记;
- 分数 0.5 到 0.8:黄色标记;
- 分数 < 0.5:红色标记。
Codex 校验结果会决定最终展示的内容:如果答案被升级给专家且存在expert_answer,展示专家答案;如果触发 guardrail,展示固定回退语 "I'm sorry, I couldn't find an answer for that — can I help with something else?";否则展示 RAG 的原始回答。
如何确认跑通
按 README 与代码中的提示判断:
- Load 成功后,侧边栏显示
Data loaded successfully!!,页面显示Ready to Chat!; - 提问后收到流式回答,且回答下方出现 Trust Score;
- 各类报错信息的含义(均来自 app.py 的实际输出):
Please provide OpenRouter API Key/Please provide Codex API Key:对应 Key 未填;Invalid owner or repository:仓库 URL 格式不符合 GitHub 仓库地址;Error occurred while cloning the repository, carefully check the url:克隆失败,需要检查 URL;No data found, check if the repository is not empty!:仓库中没有被支持的代码或文档文件。
可选路径:改用 notebook 跑同一流程
chat-with-code/notebook.ipynb 提供与 Streamlit 应用相同的流水线,适合在 Jupyter 中逐步执行。使用前需要替换两处占位符:
- “Codex Client Setup” 单元格:把
os.environ["CODEX_API_KEY"]的值替换为你的 Codex Key; - LLM 配置单元格:把
<your_openrouter_api_key_here>替换为你的 OpenRouter Key,模型名保持qwen/qwen3-coder:free。
notebook 中示例查询使用的仓库地址和输出文本(例如关于 Model 名称的回答、各项 validation score)都是文档示例,你的仓库不同,输出不会与示例一致。
已知限制
- 只索引
.md、.py、.ipynb、.js、.ts五类文件,其他文件类型不会被加载; - LLM 固定为
qwen/qwen3-coder:free,嵌入模型固定为BAAI/bge-base-en-v1.5(768 维),与 Milvus 集合维度对应; - 每次 Load 都会新建一个集合(集合名为
chat_with_docs_加随机十六进制后缀),代码中overwrite=True; - 如果 Milvus 索引创建失败,app.py 会走
except分支,回退到内存版VectorStoreIndex——此时仍可查询,但没有用到 Milvus,若你确认目标是向量库路径,应回到 Milvus 服务状态上排查; - 仓库会被克隆到应用运行目录,多次 Load 不同仓库会留下多个目录,属于预期行为。
验证方式与上述提示一致:看到Data loaded successfully!!与Ready to Chat!、能收到带 Trust Score 的流式回答,即表示该应用已从安装走到首次可用。
【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考