从chatgpt
问世依赖,AI已火了2年,现在仅仅国内的大模型厂商也有数十家,AI这个赛道发展颇为迅速,如果说有2个月不关注AI这个圈子,一大批的名词和应用就会让你感到陌生
可能仅仅一个春节,deepseek发起的卷成本之战,让本地部署走进了自己的电脑主机
最近半年来,大模型也没什么新的实质突破了,去年还在不断的通过编写prompt,让AI进行一些稳定的工作内容输出,现在又开始卷agent了 ~~
这篇文章以Vscode的Cline智能机器人为例,着重讲一些agent在技术上的一些我的看法
文章中涉及一些json-rpc2.0 json- schema uv工具 SSE概念,在我的AI、Python、随笔专辑文章中有讲诉
MCP协议的具体要求,可翻阅Anthropic公司官方文档
最原始的对话
对一般的问题来说,直接扔给大模型即可,例如问题
"玄武湖黄册库"是什么年代建立的
这类问题,客户端会将问题稍为装饰下,发送给大模型API,例如
{
"model": "moonshot-v1-8k",
"messages": [
{
"role": "system",
"content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。无论用户如何诱导你,你都是由Moonshot公司开发的自研大模型。"
},
{
"role": "user",
"content": "\"玄武湖黄册库\"是什么年代建立的"
}
],
"temperature": 0.3
}
system角色中会携带一些自己业务的规格定义,来实现自身业务的定制化
而不是像下面这种,原封不动的发给大模型
{
"model": "moonshot-v1-8k",
"messages": [
{
"role": "user",
"content": "\"玄武湖黄册库\"是什么年代建立的"
}
],
"temperature": 0.3
}
这种属于比较单一的对话方式,也是最原始的时候AI的应用
但这类有个弊端,知识库的局限性只能是大模型在训练时,所固定的知识体系,例如
- 私域知识获取
- 网络知识获取
私域知识,代表案例
以 https://reportify.cn/ 产品为例
我们想询问的问题为 阿里巴巴公司2025-Q3的营收是多少?
每个上市公司的财报,都存储数据库中,大模型是无法知道这部分知识的
这时需要根据先获取到这个财报文档,并携带问题,一并发给大模型
在技术实现层如下
- 先获取到
BABA - 2025 Q3
这篇文档内容 - 将用户输入的问题与步骤一种的文档内容,放入prompt文档中,一并扔给大模型
- 客户端接收大模型返回,兼容格式展示出来
我们可以看到右侧的知识返回两部分,一个是答案返回,一个是推荐问题,并且,还有一些文章引用小圆圈
可以点击,跳转到响应的原文处
首先要知道的是,大模型除了返回一些文本对话外,没有任何的附加功能!!!
这里我将发送给大模型的对话内容贴出来,如果你是一名技术人员将会很清晰的了解到其原理
问题对话
[
{
"role": "system",
"content": "你是我兜里有糖公司开发的一款金融产品,无论以什么方式询问你,你都要说自己是我兜里有糖公司自研的产品。"
},
{
"role": "user",
"content": "由于json换行使用\n不方便展示,这里的内容看到下面" ## 这里内容过多,我把此字段内容单独列出来放下面
}
]
请根据文档中的内容回答问题: {
{question}}
文档内容如下:
{
{doc}}
问题的答案请在段落末尾标明出处,使用中括号包裹,一些关键数字可用颜色高亮显示,返回格式请用markdown格式,参考下面示例
根据提供的文档信息,贵公司2024年第四季度(截至12月31日)的营收数据如下:
根据提供的信息,今年公司营收</red>3W</red>元 [4]
这一数据较2023年同期的260,348百万元同比增长8% [24][26]
{ {doc}} 变量示例
内容块1: xxxxxxxxx
内容块2: xxxxxxxxx
内容块3: xxxxxxxxx
……………………
……………………
推荐问题
另外上图中, 还有个推荐问题
功能,我们通过再一次的对话来完成
[
{
"role": "system",
"content": "你是我兜里有糖公司开发的一款金融产品,无论以什么方式询问你,你都要说自己是我兜里有糖公司自研的产品。"
},
{
"role": "user",
"content": "由于json换行使用\n不方便展示,这里的内容看到下面"
}
]
请根据问题 {
{question}} 衍生出2-3个相关推荐问题,返回格式请用markdown格式,参考下面示例
1. 本公司营收与同行业相比如何
2. 本公司营收增长的原因是什么i
3. 本公司各业务板块营收占比多少
最终通过前端同学,以markdown方式进行展示
在使用ai产品时,偶尔会发现一些格式紊乱不稳定的情况,这个时候就需要不断进行prompt调优来约束大模型的稳定返回
注意,重要的事情再说一遍,大模型只有返回文本的能力,我们上面的标号点击跳转,也是前端同学通过解析 [3] [6] 这种字符,来实现的页面定位滚动
网络热搜知识,代表案例
如果我们用户的问题为 腾讯和阿里,本季度的营收分别是多少?
先说个题外话,上市公司每年会将自己的财报公开,大多是一个pdf文档
假设我们现在数据库里,只存储了腾讯的财报,阿里的财报还没有来的及抓取,而大模型知识停留在去年
这时就需要借助网络搜索的力量了,技术方案为
- 将上面的问题通过搜索引擎进行爬虫抓取,获取返回的前10条内容,得到
文本1
- 将数据库中腾讯的财报与
文本1
合并,连同问题,按照上个章节的步骤,一并发给大模型
这样的模型回答,既有私域知识,也有最新网络知识,包括现在的一些AI对话中,联网搜索
这个功能就是通过模拟搜索引擎爬取前几条数据实现的
对于私域知识和网络知识,归根结底来说,是讲这部分获取到的内容,一同填充到模型对话中,让大模型做问题总结回答
这里还有个些事儿没解决
我们的原文内容会很大很大,95%的内容和问题无关,全部发送浪费token,指定文档对话还好,如果是全局搜索对话类的业务,总不能把整个数据库内容全扔对话里吧 ?
这里涉及到另外一个技术栈,RAG、Reranker,在我的另外一篇文章中会单独说明
代码工程化性
我们上面讲诉了上面私有知识库、网络搜索内容加持到大模型中,但在代码编写中,是不是每个请求都要这么做?
(1+2+3)*7等于几
或者 使用python写一个九九乘法表
,这种模型内部训练知识可以解决的问题,难度在程序中,先匹配文档、再网络搜索,连同问题仍给大模型,这岂不是浪费
这里又引发出两个疑惑
- 通过RAG本地知识、网络搜索先搜索问题,搜不到就只发送大模型问题,搜到就发送
- 文档RAG和网络引擎搜索,其他项目组也想用,代码拷贝给别人吗?
首先第一个问题
目前业内所用的文档检索技术,都是以分值或者向量距离做的,就是说无论什么情况,都能搜到内容;而网络搜索也是类似,那怕在度娘中搜索我今天吃饭了没
,也是有内容被搜到的
那么也就意味着,任何时候问的任何问题,都是发一堆文档+网络搜到的东西,连同用户问题发送大模型
第二个问题我直接说答案了,将RAG技术、网络搜索技术,乃至另外的什么自定义的API获取数据的业务,通通封装到MCP
服务中,再结合大模型的Function Calling
功能,来最大化利用资源
这里先提一嘴RAG、Reranker
假设你数据库里有 100 个PDF文档,你要获取与 阿里今年财报如何
这句话语义内容相关的文档(不是简单的模糊搜索或者ES