开源 AI 助手的企业级定制:Continue 深度实践
虽然 GitHub Copilot 等商业 AI 编程助手已经很成熟,但在企业环境中往往面临一些限制:数据安全、定制需求、成本控制等。

基于这些考虑,我开始探索开源替代方案,最终发现了 Continue 这个优秀的开源项目。这篇文章分享我的实践经验。
GitHub Copilot 的使用体验
1. 全程陪伴,安全感满满

就连写这篇文章,也是在它的陪伴下完成的。
2. 从此成为了注释、回车、Tab 工程师

我承认,我已经离不开它了。
作为一个通用的 AI 辅助开发工具,Github Copilot 的确已经做得很好了。
但是,我的欲望远不止于此。
更强大的自定义需求
我想要一个更强大的 Copilot,一个能够结合业务、深入场景来客制化自定义的 Copilot。
比如能够:
- 调度任意 LLM Model
- 选择任意上下文代码
- 封装任意 prompt 命令
- 甚至自定义 Agent 工作流的 Copilot
下面,开始介绍 Continue,玩转自定义 Copilot。
Continue 介绍

项目地址: https://github.com/continuedev/continue
Slogan: Open-source autopilot - build your own AI software development system(开源自动驾驶 - 构建您自己的 AI 软件开发系统)
一句话介绍: Continue 使您能够在 IDE 中创建自己的 AI 代码助手。使用可以连接到任何模型、任何上下文和任何其他您需要的内容的开源 VS Code 和 JetBrains 扩展。
安装方式
直接在 VS Code 插件市场搜索 Continue,安装即可,后续步骤 Continue 插件会有使用引导。

基础功能
Continue 提供了丰富的基础功能:
- 快速理解代码段
- 自动补全代码建议
- 重构函数
- 向代码库提问
- 快速使用文档作为上下文
- 使用斜杠命令执行操作
- 将类、文件等添加到上下文
- 立即理解终端错误
详见:https://docs.continue.dev/how-to-use-continue
实际应用案例
Coding 时,用最好的 LLM 沉浸式查阅资料

基于 IDE 的任意上下文沉浸式生成代码

高级功能(核心价值)
下面介绍一下 Continue 的高级功能,也是我认为最有价值的地方:
1. 调度任意 LLM Model

几乎所有主流的 LLM 都支持,包括商业的以及开源的:
- 商业模型:GPT-4o、Claude-3-Opus、Gemini Pro
- 开源模型:Llama3 系列、Mistral、CodeLlama
- 本地部署:通过 Ollama 部署本地模型
企业级应用场景: 比如很多公司对于信息安全有要求,不允许使用 Github Copilot,那么可以选择 Continue + Ollama 搭建私有化本地 Copilot。
2. 选择任意上下文
可以选择任意上下文代码,比如选择任意文件、任意函数、任意类。
跟 GitHub Copilot 不同,Continue 能够直观地感受到你所选择的上下文。
实际案例
比如,我要迭代某个 React 组件,加一个 title props:
组件的目录结构如下:
StorybookExample
├── index.ts
├── interface.ts
├── StorybookExample.stories.tsx
├── StorybookExample.tsx
└── styles.less操作步骤:
- 选中
StorybookExample.tsx和interface.ts代码 - 使用快捷键添加到上下文:
cmd+L(MacOS) /ctrl+L(Windows) - 输入需求描述

在复杂场景下,你可以组装多个代码片段、文件、或者文件夹,来生成更复杂的代码。
3. 自定义任意命令
通过自定义命令,可以将一些常用的操作,抽象封装为快捷的命令,方便使用。

你可以通过斜杠命令,来执行一些自定义的操作,比如:share、cmd、commit 等。

详见:https://docs.continue.dev/customization/slash-commands
方式一:基于配置文件自定义命令
示例: 生成 Storybook 文档命令
打开 ~/.continue/config.json 文件,添加如下配置:
{
"customCommands": [
{
"name": "storybook",
"prompt": "{{{ input }}}\n\n 请基于这份interface帮我生成一份业务组件的storybook文档。要求如下:\n\n- 组件的每一个props都需要提供数据\n\n- storybook中使用@storybook/react进行文档的生成\n\n- 绝对不能回答跟storybook文档生成不相关的内容\n\n- 不需要安装任何包,直接生成stories文件即可",
"description": "基于interface生成storybook文档"
}
]
}使用方法:
- 选择 interface.ts 文件
- 输入
/storybook命令

方式二:基于 TypeScript 配置文件自定义命令
示例: 生成 commit message 命令
打开 ~/.continue/config.ts 文件,添加如下配置:
export function modifyConfig(config: Config): Config {
config.slashCommands?.push({
name: "commit",
description: "Write a commit message",
run: async function* (sdk) {
const diff = await sdk.ide.getDiff();
for await (const message of sdk.llm.streamComplete(
`${diff}\n\nWrite a commit message for the above changes. Use no more than 20 tokens to give a brief description in the imperative mood (e.g. 'Add feature' not 'Added feature'):`,
{
maxTokens: 20,
}
)) {
yield message;
}
},
});
return config;
}方式二的优势:
- 更加灵活的控制命令逻辑
- 可以调用 IDE API(如
getDiff方法) - 支持执行任意 Node.js 代码
- 可以调用外部接口、读取文件等
使用方法:
输入 /commit 命令:

4. 自定义任意 Context Providers
Context Providers,故名思义,就是提供上下文的服务。

你可以通过 @ 操作符,来选择任意的 Context Providers 来提供不同的上下文。
内置 Context Providers
选择文件作为上下文:

选择文档作为上下文:

自定义 Context Providers
示例: 创建一个 RAG 上下文提供程序
1. 创建 RagContextProvider
定义一个自定义的上下文提供程序,该提供程序将查询发送到内部服务器,并从向量数据库中获取结果。
~/.continue/config.ts 文件:
const RagContextProvider: CustomContextProvider = {
title: "rag",
displayTitle: "RAG",
description: "Retrieve snippets from our vector database of internal documents",
getContextItems: async (
query: string,
extras: ContextProviderExtras
): Promise<ContextItem[]> => {
const response = await fetch("https://internal_rag_server.com/retrieve", {
method: "POST",
body: JSON.stringify({ query }),
});
const results = await response.json();
return results.map((result) => ({
name: result.title,
description: result.title,
content: result.contents,
}));
},
};2. 修改配置文件
在 config.ts 中添加 RagContextProvider 以使其生效:
export function modifyConfig(config: Config): Config {
if (!config.contextProviders) {
config.contextProviders = [];
}
config.contextProviders.push(RagContextProvider);
return config;
}前端研发应用场景
通过 Context Providers,可以提供:
- 公司内部的文档
- 组件库文档和示例
- 代码库的最佳实践
- 业务规范和编码标准
这样可以生成更符合公司规范的代码。
5. 基于 Model Provider 接入 Agent
Model Provider:顾名思义,就是模型提供者。

官方支持多种 Model Provider:
- OpenAI
- Anthropic (Claude)
- Google (Gemini)
- Hugging Face
- 本地模型 (Ollama)
详见:https://docs.continue.dev/reference/Model%20Providers/openai
Agent 集成示例
场景: 我想要一个能够结合公司私有组件库来生成业务组件的 Agent。
问题背景: 如下图,现有的 LLM 不包含最新的 @mui/x-tree-view 知识,所以生成的代码是错误的。

解决方案:

1. 开发 Agent
开发一个 Agent 能够召回最新的 @mui/x-tree-view 组件知识来生成代码。
2. 接入 Model Provider
在 ~/.continue/config.json 文件中,添加如下配置:
{
"models": [
{
"title": "Mui Business Component Agent",
"provider": "openai",
"model": "gpt-4o",
"apiBase": "http://localhost:3000/api/v1"
}
]
}配置说明:
provider: "openai":选择 OpenAI 格式是因为 Agent 接口返回的流数据格式与 OpenAI 一致model: "gpt-4o":可以任意选择一个 OpenAI 系列 Model,仅为了适配 Continue 的数据格式apiBase:重点 - 填写我们的 Agent 接口地址
使用 Agent:

选择了 Mui Business Component Agent 作为 Model Provider,输入需求,即可生成正确的业务组件代码。
总结
Continue 的核心优势:
- 完全开源:可以自由定制和扩展
- 模型无关:支持任意 LLM 模型
- 高度可配置:命令、上下文、模型都可自定义
- 企业友好:支持私有化部署
- 开发者体验:与 IDE 深度集成
通过 Continue,我们可以构建真正属于自己的 AI 代码助手,不再受限于商业产品的限制。
下一步
后续篇章,我们将继续探索:
- 自定义 Command 的高级用法
- Context Providers 的企业级应用
- Agent 开发和集成的完整案例
- Continue 与 RAG 系统的结合
让我们一起探索 Copilot 和 Agent 的更多可能性!
Last updated on