如果你正在寻找一个能直接在终端里理解、分析和操作大型代码库的 AI 助手,那么 Meta 最新开源的Muse Code值得你立刻关注。它不是另一个需要复杂 WebUI 或 IDE 插件的工具,而是一个专为终端(Terminal)设计的 AI 智能体,目标直指开发者的日常工作流:在命令行里,用自然语言直接与代码库对话。
简单来说,Muse Code 让你能在终端里,像问同事一样,向 AI 提问关于整个项目的问题。比如:“这个微服务是怎么处理用户认证的?”、“帮我找出所有内存泄漏的风险点”、“给这个函数写个单元测试”。它背后的核心是 Meta 最新发布的Code Llama 3.1系列模型,特别是经过指令微调的Instruct 70B版本,具备强大的代码理解和生成能力。最关键的是,它被设计成能处理超大型代码库的上下文,解决了传统 AI 编码助手只能看单个文件的痛点。
这篇文章不会空谈概念,而是聚焦于实际部署和使用。我们会拆解清楚:Muse Code 到底是什么架构?它对硬件有什么要求?如何在你自己的机器上跑起来?怎么用它来查询代码、生成代码、甚至重构代码?以及,作为终端工具,它的响应速度和资源占用到底如何?无论你是想将它集成到 CI/CD 流程中,还是作为个人效率工具,都能在这里找到可落地的操作指南。
1. 核心能力速览
在深入细节之前,我们先通过一个表格快速了解 Muse Code 的核心特性,这能帮你判断它是否适合你的需求。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 面向终端的 AI 代码智能体,基于大型语言模型(LLM) |
| 核心模型 | 基于Meta Code Llama 3.1系列(特别是 70B Instruct 版本)微调 |
| 主要功能 | 代码库问答、代码解释、代码生成、缺陷查找、重构建议、生成测试 |
| 交互方式 | 纯终端命令行,支持自然语言对话 |
| 上下文处理 | 专为大型代码库优化,能理解项目级结构和依赖 |
| 硬件门槛 | 高。推荐使用高性能 GPU(如 H100, A100)以获得最佳体验。CPU 模式可用于轻量级查询,但速度慢。 |
| 显存需求 | 极高。运行 70B 参数模型需要140GB+ 的 GPU 显存。可通过量化(如 GPTQ, AWQ)降低需求,但 8G/12G 消费级显卡仍无法本地运行完整模型。 |
| 启动方式 | 通过 Docker 容器或源码安装,启动后提供本地 CLI 或 API 服务 |
| 是否支持 API | 是。提供 RESTful API,可供其他工具或脚本集成调用。 |
| 是否支持批量任务 | 是。可通过脚本批量发送代码分析请求,适合自动化代码审查等场景。 |
| 适合场景 | 大型项目代码审计、新成员快速熟悉代码库、自动化生成文档/测试、集成到开发流水线 |
关键点解读:
- 终端原生:这是 Muse Code 最大的差异化优势。它不依赖特定 IDE,直接在开发者最熟悉的 Shell 环境中工作,与
git,grep,find等工具链无缝结合。 - 模型要求高:70B 模型带来了强大的能力,也带来了极高的部署成本。个人开发者想本地运行完整模型非常困难,通常需要借助云 GPU 服务或使用量化后的版本。
- 项目级理解:不同于 Copilot 针对单行或单个文件的补全,Muse Code 旨在理解模块、类、函数之间的跨文件关系,回答架构层面问题。
2. 适用场景与使用边界
谁适合使用 Muse Code?
- 架构师与 Tech Lead:快速评估新接手的遗留系统架构,生成系统概览文档。
- 高级开发工程师:在重构大型模块前,让 AI 分析所有依赖和潜在影响。
- 安全工程师与 QA:自动化扫描代码库中的安全漏洞、坏味道和潜在的 Bug 模式。
- 新项目成员:作为“超级智能
grep”,快速回答“这个功能在哪实现”、“这个配置怎么生效”等问题,加速 onboarding。 - DevOps 工程师:将其集成到 CI/CD 管道,在 MR/PR 提交时自动进行代码质量检查。
Muse Code 能解决什么问题?
- 降低认知负荷:面对数十万行代码,无需手动翻阅无数文件,直接提问获取答案。
- 提升代码审查效率:自动识别代码风格不一致、潜在的性能瓶颈或安全风险。
- 辅助重构与迁移:分析代码依赖,为大型重构提供数据支持和建议。
- 生成高质量文档:根据代码自动生成或更新 API 文档、模块说明。
不适合什么场景?
- 替代基础编程:它不适合用来学习编程基础语法或编写简单的“Hello World”。它的价值在于处理复杂性和规模。
- 实时编码补全:它不是 IDE 插件,无法提供击键级的代码自动完成。它的交互是问答式的。
- 资源受限的个人开发:如果没有访问高性能 GPU 集群的权限,运行完整模型将非常困难。
- 完全替代人工设计:AI 的建议需要经验丰富的开发者进行判断和修正,不能盲目采纳。
合规与安全边界
- 代码隐私:Muse Code 默认在本地或你控制的服务器上运行模型,代码无需上传至第三方,适合处理私有和敏感代码库。
- 授权使用:确保你拥有所分析代码库的合法权限。不得用于分析未授权的第三方专有代码。
- 结果审核:AI 生成的代码、重构建议或安全结论必须经过人工严格审核,不可直接部署到生产环境。
3. 环境准备与前置条件
部署 Muse Code 前,需要确保你的环境满足以下要求。由于其对算力要求苛刻,请仔细核对。
3.1 硬件与操作系统要求
- 推荐配置(GPU推理):
- GPU:NVIDIA A100 (80GB) / H100 或更高性能卡。这是运行Code Llama 3.1 70B非量化模型的最低可行配置。
- 显存:140GB 以上。70B 的 FP16 模型加载就需要约 140GB 显存。
- CPU:多核现代 CPU(如 Intel Xeon 或 AMD EPYC)。
- 内存:系统 RAM 建议 256GB 以上,用于处理大型代码库的索引和上下文。
- 存储:至少 500GB SSD,用于存放模型文件(单个 70B 模型约 130GB+)和代码索引。
- 最低配置(CPU推理/量化模型):
- 无 GPU 或仅有消费级 GPU(如 RTX 4090 24GB)。此时必须使用量化模型(如 4-bit GPTQ 版本),可将显存需求降至20-40GB。
- CPU:需要强大的多核 CPU 和足够的内存带宽。推理速度会慢很多。
- 内存:需要足够的 RAM 来容纳模型权重(量化后约 40-70GB)和激活值,建议 128GB+。
- 操作系统:主流 Linux 发行版(Ubuntu 20.04/22.04 LTS, CentOS 7/8)是首选。macOS(Apple Silicon)也可通过 CPU 或 Metal 后端运行,但性能非最优。Windows 建议使用 WSL2。
3.2 软件与依赖
- Docker & Docker Compose:这是官方推荐的部署方式,能解决大部分环境依赖问题。
- Python:3.9 或 3.10。
- CUDA 工具包:版本需与你的 GPU 驱动及 PyTorch 版本匹配(如 CUDA 11.8 或 12.1)。
- 模型文件:需要提前从 Hugging Face 或 Meta 官方渠道下载
CodeLlama-3.1-70B-Instruct模型权重。量化模型可从社区获取(如TheBloke维护的 GPTQ 版本)。
3.3 网络与端口
- 模型下载:确保网络可以稳定访问 Hugging Face 或相关镜像站,以下载数十 GB 的模型文件。
- 服务端口:Muse Code 的 API 服务默认会占用一个端口(如
8000或8080)。确保该端口在主机上未被占用。
4. 安装部署与启动方式
官方提供了 Docker 部署方式,这是最便捷、依赖问题最少的方案。以下步骤假设你已具备上述环境条件,并已下载好模型文件。
4.1 通过 Docker 快速启动
这是最推荐的方式,能隔离环境。
克隆项目仓库:
git clone <Muse-Code-官方仓库地址> cd muse-code(注:由于项目新发布,具体仓库地址需替换为实际地址,如
https://github.com/facebookresearch/muse-code)准备模型目录:将下载好的
CodeLlama-3.1-70B-Instruct模型文件(或量化版本)放在宿主机的某个目录,例如/path/to/your/models。配置 Docker Compose 文件:查看项目内的
docker-compose.yml,主要需要配置两个挂载卷:- 将主机上的模型目录挂载到容器内指定路径(如
/app/models)。 - 将你希望分析的代码库目录挂载到容器内(如
/app/codebase)。
# docker-compose.yml 示例片段 version: '3.8' services: muse-code: image: muse-code:latest # 假设官方提供了镜像 container_name: muse-code ports: - "8000:8000" # 将容器内API端口映射到主机 volumes: - /path/to/your/models:/app/models:ro - /path/to/your/code/project:/app/codebase:rw environment: - MODEL_PATH=/app/models/CodeLlama-3.1-70B-Instruct - HF_TOKEN=your_huggingface_token # 如果需要 deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu]- 将主机上的模型目录挂载到容器内指定路径(如
启动服务:
docker-compose up -d启动后,使用
docker logs -f muse-code查看日志,确认模型加载成功且 API 服务已就绪。
4.2 源码安装与启动(高级)
如果你想深度定制或贡献代码,可以选择源码安装。
创建 Python 虚拟环境:
python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows安装依赖:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据你的CUDA版本 pip install -r requirements.txt配置模型路径:在项目配置文件中指定模型路径。
# config.yaml 或环境变量示例 export MODEL_PATH=/path/to/CodeLlama-3.1-70B-Instruct export CODEBASE_ROOT=/path/to/your/project启动 CLI 或 API 服务:
# 启动交互式 CLI python -m muse_code.cli # 或启动 API 服务 python -m muse_code.serve --host 0.0.0.0 --port 8000
5. 功能测试与效果验证
服务启动后,我们通过几个典型场景来测试 Muse Code 的核心能力。我们将通过终端直接调用其 API 进行测试。
5.1 测试准备:连接服务
首先,确认 API 服务正在运行并可以访问。
curl http://localhost:8000/health预期返回{"status": "ok"}或类似信息。
5.2 场景一:代码库全局问答
测试目的:验证 Muse Code 对项目整体架构的理解能力。操作步骤:
- 向
/v1/query端点发送一个关于项目整体的问题。 - 观察回答是否准确、具体,并引用相关文件。
请求示例:
curl -X POST http://localhost:8000/v1/query \ -H "Content-Type: application/json" \ -d '{ "query": "请简要描述这个微服务项目的整体架构,包括主要模块和它们之间的通信方式。", "context": { "codebase_path": "/app/codebase" } }'预期结果:AI 应能总结出项目是一个基于 Spring Cloud 的微服务系统,列出user-service,order-service,gateway等核心服务,并指出它们通过 REST API 或消息队列(如 Kafka)进行通信,可能还会提到配置中心和服务注册中心。
成功判断:回答不应是泛泛而谈,应包含项目中实际存在的模块名称和技术栈。
5.3 场景二:跨文件代码理解与解释
测试目的:验证 AI 能关联多个文件,理解复杂逻辑。操作步骤:
- 询问一个涉及多个类/文件的具体业务逻辑问题。
请求示例:
curl -X POST http://localhost:8000/v1/query \ -H "Content-Type: application/json" \ -d '{ "query": "当用户提交一个订单时,从Controller接收到请求,到订单状态最终被持久化到数据库,整个流程经过了哪些主要的函数或方法?请按顺序列出关键的文件和函数名。", "context": { "codebase_path": "/app/codebase", "focus_files": ["OrderController.java", "OrderService.java", "PaymentService.java"] # 可选的焦点文件 } }'预期结果:回答应能追踪调用链,例如:OrderController.createOrder()->OrderService.processOrder()->PaymentService.validatePayment()->OrderRepository.save()。并指出这些方法所在的文件。
成功判断:调用链基本正确,提及的文件和函数名在项目中真实存在。
5.4 场景三:代码生成与补全
测试目的:验证 AI 能根据现有代码上下文生成新的、符合风格的代码。操作步骤:
- 指定一个文件或代码片段,要求 AI 为其生成一个相关的函数或测试。
请求示例:
curl -X POST http://localhost:8000/v1/generate \ -H "Content-Type: application/json" \ -d '{ "instruction": "为 `UserService` 类中的 `getUserById(Long id)` 方法编写一个完整的单元测试,使用JUnit 5和Mockito。假设已经注入了 `UserRepository`。", "context": { "codebase_path": "/app/codebase", "reference_code": "public User getUserById(Long id) { return userRepository.findById(id).orElseThrow(() -> new UserNotFoundException(id)); }" } }'预期结果:AI 应生成一个结构清晰、使用了@Mock,@InjectMocks,@Test等注解的测试类,并包含对正常情况和异常情况(UserNotFoundException)的测试。
成功判断:生成的代码语法正确,符合项目使用的测试框架规范,并且逻辑与被测方法匹配。
5.5 场景四:缺陷与风险识别
测试目的:验证 AI 的代码审查能力。操作步骤:
- 让 AI 分析指定代码片段或文件,找出潜在问题。
请求示例:
curl -X POST http://localhost:8000/v1/analyze \ -H "Content-Type: application/json" \ -d '{ "task": "code_review", "code_snippet": "public String processData(String input) { return new StringBuilder(input).reverse().toString(); }", "context": { "language": "java", "requirements": ["检查空指针风险", "检查性能问题", "检查代码风格"] } }'预期结果:AI 应指出input可能为null,导致NullPointerException;可能建议使用StringUtils.reverse()(如果项目中有)或添加空值检查;可能还会提到StringBuilder在此简单场景下是否必要。
成功判断:能识别出明显的潜在缺陷(如空指针),并能给出合理的改进建议。
6. 接口 API 与批量任务
Muse Code 的核心价值之一是其可编程的 API 接口,便于集成到自动化流程中。
6.1 核心 API 端点
假设服务运行在http://localhost:8000。
| 端点 | 方法 | 功能描述 | 请求体示例 |
|---|---|---|---|
/v1/query | POST | 对代码库进行自然语言问答 | {"query": "问题", "context": {...}} |
/v1/generate | POST | 根据上下文生成代码 | {"instruction": "指令", "context": {...}} |
/v1/analyze | POST | 代码分析(审查、查错) | {"task": "任务类型", "code_snippet": "...", "context": {...}} |
/v1/embed | POST | 为代码片段生成向量嵌入(用于检索) | {"code": "代码片段", "language": "java"} |
/health | GET | 健康检查 | 无 |
6.2 Python 客户端调用示例
以下是一个简单的 Python 脚本,演示如何与 Muse Code API 交互,并进行批量处理。
import requests import json import os from typing import List, Dict class MuseCodeClient: def __init__(self, base_url: str = "http://localhost:8000"): self.base_url = base_url self.session = requests.Session() def query_codebase(self, question: str, codebase_path: str) -> Dict: """向代码库提问""" url = f"{self.base_url}/v1/query" payload = { "query": question, "context": { "codebase_path": codebase_path } } try: response = self.session.post(url, json=payload, timeout=60) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"请求失败: {e}") return {} def batch_review_files(self, file_paths: List[str], codebase_path: str) -> List[Dict]: """批量审查多个文件""" results = [] for file_path in file_paths: # 读取文件内容 try: with open(file_path, 'r', encoding='utf-8') as f: code_content = f.read() except Exception as e: print(f"无法读取文件 {file_path}: {e}") continue # 调用分析接口 url = f"{self.base_url}/v1/analyze" payload = { "task": "code_review", "code_snippet": code_content, "context": { "language": self._infer_language(file_path), "codebase_path": codebase_path, "file_path": file_path } } try: response = self.session.post(url, json=payload, timeout=30) if response.status_code == 200: review_result = response.json() review_result['file'] = file_path results.append(review_result) print(f"已审查: {file_path}") else: print(f"审查失败 {file_path}: {response.status_code}") except Exception as e: print(f"处理文件 {file_path} 时出错: {e}") return results def _infer_language(self, file_path: str) -> str: """根据文件后缀推断编程语言""" ext = os.path.splitext(file_path)[1].lower() lang_map = { '.py': 'python', '.java': 'java', '.js': 'javascript', '.ts': 'typescript', '.go': 'go', '.rs': 'rust', '.cpp': 'cpp', '.cc': 'cpp', '.cxx': 'cpp', '.c': 'c', '.cs': 'csharp', '.php': 'php', '.rb': 'ruby', } return lang_map.get(ext, 'plaintext') # 使用示例 if __name__ == "__main__": client = MuseCodeClient() # 1. 单次问答 project_path = "/app/codebase" answer = client.query_codebase("项目中使用的是什么数据库连接池?", project_path) print("问答结果:", json.dumps(answer, indent=2, ensure_ascii=False)) # 2. 批量审查指定目录下的所有Java文件 import glob java_files = glob.glob(os.path.join(project_path, "**/*.java"), recursive=True)[:10] # 限制前10个 batch_results = client.batch_review_files(java_files, project_path) for result in batch_results: print(f"\n文件: {result['file']}") if 'issues' in result: for issue in result['issues']: print(f" - [{issue['severity']}] {issue['description']}")6.3 集成到 CI/CD 流水线
你可以将上述批量审查脚本集成到 GitLab CI、GitHub Actions 或 Jenkins 中,在每次提交或合并请求时自动运行。
GitHub Actions 工作流示例片段:
name: AI Code Review with Muse Code on: [pull_request] jobs: muse-code-review: runs-on: [self-hosted, linux, x64] # 需要在有Muse Code服务的runner上运行 steps: - uses: actions/checkout@v3 - name: Run Muse Code Batch Review env: MUSE_CODE_API_URL: ${{ secrets.MUSE_CODE_API_URL }} run: | python batch_review.py --api-url $MUSE_CODE_API_URL --codebase-path .7. 资源占用与性能观察
运行 Code Llama 3.1 70B 这样的模型,资源监控至关重要。
7.1 显存与内存占用观察
- GPU 显存:使用
nvidia-smi命令实时监控。watch -n 1 nvidia-smi- 完整模型(FP16):预期占用140GB+显存。如果看到显存占满,属于正常。
- 量化模型(如 4-bit GPTQ):预期占用20GB - 40GB显存,具体取决于量化方法和序列长度。
- 系统内存(RAM):使用
htop或free -h查看。除了模型权重,处理大型代码库构建索引时,内存占用也会显著增加,可能达到数十 GB。
7.2 推理速度与响应时间
- 首次查询:最慢,因为需要加载模型和建立代码库的上下文索引。可能需要数十秒到数分钟。
- 后续查询:如果上下文已缓存,速度会快很多,通常在几秒到十几秒内返回答案,取决于查询复杂度。
- 影响因素:
- 查询长度与复杂度:复杂、需要检索大量文件的查询更慢。
- 代码库大小:项目越大,初始索引时间越长。
- 硬件性能:GPU 的算力(TFLOPS)和内存带宽是关键。
- 批处理大小:批量处理多个小任务可能比单个大任务更高效。
7.3 性能优化建议
- 使用量化模型:这是个人或资源有限团队唯一可行的方案。GPTQ、AWQ、GGUF 等格式能大幅降低显存需求,代价是轻微的精度损失。
- 限制上下文长度:在配置中限制单次查询检索的代码 token 数量,避免处理整个巨型仓库。
- 预热服务:在正式使用前,先发送几个简单查询,让模型和索引预热。
- 异步处理:对于耗时的分析任务,使用异步 API 调用,避免阻塞。
- 硬件升级:如果预算允许,升级到显存更大的 GPU(如 A100 80GB)或使用多卡并行推理。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Docker 启动失败,提示 GPU 不可用 | 1. Docker 未安装 NVIDIA Container Toolkit。 2. GPU 驱动版本太旧。 | 运行docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi看是否正常。 | 1. 安装 NVIDIA Container Toolkit 。 2. 升级 GPU 驱动。 |
模型加载失败,提示CUDA out of memory | GPU 显存不足,无法加载模型。 | 使用nvidia-smi确认显存大小和占用。 | 1. 使用量化版本模型。 2. 使用 CPU 模式(极慢)。 3. 升级硬件。 |
| API 服务启动成功,但查询返回超时或无响应 | 1. 首次查询需要构建索引,耗时极长。 2. 查询过于复杂,处理时间超过默认超时设置。 3. 系统内存不足,发生交换(swapping)。 | 1. 查看服务日志docker logs -f muse-code。2. 监控系统内存 free -h和交换分区swapon -s。 | 1. 耐心等待首次查询完成。 2. 增加 API 客户端超时时间。 3. 简化查询,或增加系统内存。 |
| 回答质量差,答非所问或胡言乱语 | 1. 模型未针对代码问答充分微调(如果用的不是官方 Muse Code 适配版本)。 2. 代码库上下文未正确加载或索引。 3. 查询表述不清晰。 | 1. 确认使用的模型是CodeLlama-3.1-70B-Instruct或 Muse Code 官方适配版。2. 检查挂载的代码库路径是否正确,容器内是否有访问权限。 3. 尝试更具体、更结构化的问题。 | 1. 使用官方推荐的模型版本。 2. 确保代码库路径正确挂载且可读。 3. 优化提问方式,提供更明确的上下文。 |
| 批量处理时,部分请求失败 | 1. 并发请求过多,导致服务过载或 OOM。 2. 某些文件编码或格式异常,导致预处理失败。 | 1. 查看服务端错误日志。 2. 检查失败请求对应的具体文件。 | 1. 在客户端控制并发数(如使用信号量)。 2. 在批量处理前,先过滤掉二进制、非文本或超大文件。 |
| 无法从 Hugging Face 下载模型 | 网络连接问题,或未提供访问令牌(如需)。 | 手动在浏览器中访问模型页面,测试网络。 | 1. 配置网络代理或使用国内镜像源。 2. 如果模型是私有的或需要授权,在环境变量中设置 HF_TOKEN。 |
9. 最佳实践与使用建议
要让 Muse Code 真正成为生产力工具,而不仅仅是玩具,请遵循以下建议:
- 从小处着手,验证流程:第一次使用时,不要直接扔给它一个百万行代码的企业级项目。先用一个清晰的中小型开源项目(如一个设计良好的 Web 框架示例)进行测试,验证从部署、启动、提问到获得满意答案的完整流程。
- 精心设计你的问题(Prompt):这是获得高质量答案的关键。问题要具体、有上下文。
- 差:“这个代码是干嘛的?”
- 好:“在
src/services/payment/目录下的PaymentProcessor.java文件中,processRefund方法是如何处理并发退款请求的?请解释其锁机制或事务处理逻辑。”
- 建立代码索引的规范:如果代码库非常大,考虑分模块建立索引或只索引核心业务目录,避免每次查询都扫描无关的第三方库和构建产物。
- 将输出集成到工作流中:不要只在终端里看答案。将 Muse Code 的审查结果自动格式化后评论到 Git PR/MR 中;将生成的架构图或文档保存到 Confluence/Notion;将发现的严重安全问题自动创建 Jira Ticket。
- 始终进行人工复核:AI 会“自信地犯错”。对于它生成的代码、给出的重构建议、指出的安全漏洞,必须由资深开发者进行二次确认。将其视为一个强大的“初级助手”或“搜索引擎”,而非最终决策者。
- 关注成本与效益:持续运行一个 70B 模型的成本很高。评估它为你节省的时间是否大于其消耗的算力成本。对于日常小任务,或许传统的
grep,ctags, IDE 导航更高效;对于周期性的、复杂的架构分析或大规模审查,再启动 Muse Code。 - 注意数据安全与合规:确保运行 Muse Code 的服务器环境安全,API 接口不应暴露在公网。处理公司核心代码时,务必遵守内部安全规定。
Meta 的 Muse Code 代表了一个明确的趋势:AI 编程助手正从“单行补全”走向“项目级理解”,从“IDE 插件”走向“原生工具链”。它的终端原生特性和对大型代码库的专注,为资深开发者、架构师和工程团队提供了一个强大的新工具。虽然目前其极高的硬件门槛将大多数个人开发者挡在门外,但随着模型量化技术的进步和云服务成本的降低,这种能力的平民化只是时间问题。
对于有条件的团队,现在就可以尝试将其集成到核心代码的审查和知识传承流程中。对于个人开发者,密切关注其发展,并开始学习如何与这类“代码库级 AI 智能体”进行有效交互(Prompt 工程),是一项有价值的投资。最实际的下一步是:找一个你能访问的、规模适中的代码仓库,按照本文的部署和测试步骤,亲自体验一次从提问到获得深度答案的全过程。你会发现,与代码对话的时代,已经开始了。