返回首页
最新
关于我们在构建这个过程中遇到的一些技术背景。
MCP工具在大规模金融数据处理上并不太有效。某个工具需要五年的每日价格数据,这会在上下文窗口中产生数万个令牌。而数据供应商将数十个工具打包到一个MCP服务器中,仅仅是模式就可能消耗超过5万个令牌,直到代理能够执行有用的操作。因此,我们在工作区初始化时从MCP模式自动生成类型化的Python模块,并将其上传到沙箱中。代理就像使用普通库一样导入这些模块。每个服务器在提示中只保留一行摘要。我们的服务器上大约有80个工具,无论一个服务器有3个工具还是30个,提示的成本是相同的。这部分并不是特定于金融的,它适用于任何MCP服务器。
另一个重要的方面是使研究能够在会话之间持久化。大多数代理将单个交付物(如PDF或电子表格)视为最终目标。在投资中,这意味着从第一天开始。你会在收益下降时更新模型,在竞争对手报告时重新运行比较,持续在旧分析上叠加新的分析。但如果在代理会话之间这样做,文件不会保留,每次都需要重新粘贴上下文。因此,我们围绕工作区构建了一切。每个工作区映射到一个持久的沙箱,每个研究目标一个。代理维护自己的记忆文件,记录发现和文件索引,在每次大型语言模型调用之前重新读取。过一周再回来,开始一个新线程,它会从上次中断的地方继续。
我们还希望代理能够拥有真正的领域上下文,就像Claude Code拥有代码库上下文一样。投资组合、观察列表、风险承受能力、金融数据来源,所有这些都注入到每次调用中。现有的AI投资平台有一些这样的功能,但远不及一个合适的代理系统所能做到的。我们想要这两者,但找不到,于是我们自己构建了这个系统,并将其开源。
确切地说,在1903年,他们预测人类在最佳情况下需要一百万年才能建造出有用的重于空气的飞行器(我想这算是讽刺吧)。然而,实际上只用了70天。同年,莱特兄弟驾驶他们的飞机“起飞”了:
[维基百科 - 莱特飞行器](https://en.wikipedia.org/wiki/Wright_Flyer)
[Reddit - 历史问答](https://www.reddit.com/r/AskHistorians/comments/1ocua1b/in_1903_the_nyt_published_an_editorial_declaring/)
经过实战检验的代理技能,适用于Claude Code、Copilot、Cursor、Gemini CLI等,涵盖15种以上语言的每个主要测试自动化框架: https://github.com/LambdaTest/agent-skills
寻找项目贡献者?欢迎发布任何可能引起HN读者兴趣的项目,特别是开源项目。请遵循以下格式:<p>项目名称<p>项目描述<p>您希望这个月构建什么?<p>您需要什么样的技能?<p>如何联系您?<p>链接到您的GitHub或其他您希望吸纳新贡献者的平台,例如您的项目管理软件或聊天室。
我们构建了Kontext CLI,因为AI编码代理需要访问GitHub、Stripe、数据库以及其他数十种服务——而目前大多数团队通过将长期有效的API密钥复制粘贴到.env文件或实际的聊天界面中来处理此问题,同时寄希望于一切顺利。
问题不仅仅是秘密的扩散。更重要的是,没有访问的来源追踪。你不知道哪个开发者启动了哪个代理,它访问了什么,或者是否应该被允许访问。当你将原始凭证交给一个进程时,你就失去了执行政策、审计访问或轻松更换凭证的能力。凭证就是授权,当自主代理每个会话进行数百次API调用时,这种方式在根本上是有问题的。
Kontext采取了不同的方法。你在一个.env.kontext文件中声明一个项目所需的凭证:
```
GITHUB_TOKEN={{kontext:github}}
STRIPE_KEY={{kontext:stripe}}
LINEAR_TOKEN={{kontext:linear}}
```
然后运行`kontext start --agent claude`。CLI通过OIDC进行身份验证,对于每个占位符:如果服务支持OAuth,它会通过RFC 8693令牌交换将占位符替换为短期访问令牌;对于静态API密钥,后端会将凭证直接注入到代理的运行环境中。无论哪种方式,凭证仅在会话期间存在于内存中——从未写入你机器上的磁盘。每个工具调用在代理运行时都会被流式记录以便审计。
最接近的类比是安全令牌服务(STS):你只需进行一次身份验证,后端动态生成短期、范围限定的凭证——但与传统STS不同的是,我们持有上游的秘密,因此没有长期有效的凭证会到达代理。后端持有你的OAuth刷新令牌和API密钥;CLI从未见过它们。它返回的是针对会话的短期访问令牌。
CLI为每个工具调用捕获的信息包括:代理尝试做了什么、发生了什么、是否被允许,以及是谁执行的——这些信息都归属于某个用户、会话和组织。
只需一条命令即可安装:`brew install kontext-dev/tap/kontext`
CLI使用Go编写(每个工具调用大约5毫秒的钩子开销),使用ConnectRPC进行后端通信,并将身份验证信息存储在系统密钥环中。今天支持Claude Code,Codex支持即将推出。
我们接下来将致力于服务器端的政策执行——每个工具调用的允许/拒绝决策的基础设施已经搭建好,我们只需完善流程,以便工具调用也可以被拒绝。
我们非常希望能听到你们对这种方法的反馈。特别想了解的是:团队目前是如何处理AI代理的凭证管理的?你们只是将环境变量粘贴到代理聊天中,还是找到了更好的解决方案?
GitHub: [https://github.com/kontext-dev/kontext-cli](https://github.com/kontext-dev/kontext-cli)
网站: [https://kontext.security](https://kontext.security)