ChatGPT之自然语言与编程语言的疯狂转换-代码实战与应用灵感
标签: #Ai #ChatGPT #ChatGPT-Calling #Share
如何拥有一位 “私人” AI
众所周知,目前的众多大模型都不会对外提供实时的讯息(因为没有接入网络)以及持久化存储的能力,而且AI还会主动的忽略你提及的私人信息。

但真的完全没有办法吗?据我所知,目前仍然有两种方案来解决这个问题,分别是:**LangChain **与 Funtion Calling.
LangChain
LangChain是一个开源的框架,它可以让AI开发人员把像GPT-4这样的大型语言模型(LLM)和外部数据结合起来。
目前支持的语言:JavaScript、TypeScript、Python。
它的基本作用是将用户提供的数据集(文本、PDF、图片等)拆分,将其存入向量存储中,最后将其转化为 Prompt-Completin,将其用作训练的最终答案。
即,如果你现在有了一个大型语言模型(例如清华大学开源的CPM-Bee),你希望将特定领域知识灌输给它,你一定要想到且必须使用:LangChain。
在近期的文章中经常有在本地跑大模型的文章,如果涉及到喂数据,那一定少不了使用该框架。
Function Calling
Developers can now describe Functions to GPT-4-0613 and gpt-3.5-turbo-0613, and have the model intelligently choose to output a JSON object containing arguments to call those functions. This is a new way to more reliably connect GPT’s capabilities with external tools and APIs.
图示如下:

核心点在于 Function 是一种类似于编码能力一样的输入 + 输出。
它最简单的表现形式,例如各大APP中内置的智能客服,我们一般都预设了问题及答案,这一组 问题+答案就是一个类似于编程领域的Function,GPT将会在你发问时,分析并匹配最接近的Function,然后基于预设的Function执行结果,再次发问(此步可以极大的命中核心诉求,同时一定程度上让GPT联网了,懂的更多了)。
值得注意的是:
- GPT仍然不会持久化任何信息,仅会在当前对话上下文中短暂的记忆。
- Function 的执行可以是纯粹的自然语言,也可以是编程语言(无论是爬虫还是数据库、还是某一个Api)
Function Calling 能力的添加在一定程度上解决了用户喂脏数据和获取新数据的矛盾点,是一个质的飞跃,同时也让非研发工作者有了更加轻松便捷的调用算力的能力。
应用灵感
由于FunctionCalling的存在,我们可以让ChatGPT “连上网”(其实是用户自定义的任何内容),这样一来,ChatGPT的可定制化程度就大大提高了,可以做私域知识库,智能客服或者私人助理等等,它的上限完全取决于你如何调用算力。
如何用自然语言更大程度的调用算力。
这句话非常关键。
例如本次的黑客马拉松我就有一个想法是尝试做一下基于GPT的智能比价(实际没有立项),有兴趣的话可以看看它与传统方案的对比。
传统方案
- 爬虫想办法去爬数据
- 产品、业务思考哪些东西可以作为特征来进行比对
- 算法基于产品的文档(特征集),对其进行开发,主要内容是品相似度识别,找到一堆商品中哪一个是其竞对商品
- 投入使用
- 产品、业务继续提需求(新特征,例如奶粉要更多的关注是几段奶粉)
- 反复迭代开发
Function Calling 方案
- 爬虫想办法去爬数据
- 算法打通ChatGPT,构建好交互平台,让用户(产品/业务)可以自行定义Function(配合爬虫)
- 产品、业务思考哪些东西可以作为特征来进行比对,自己随时调整Function的语义
- 投入使用
丐版代码实战
由于篇幅有限,我会把用伪代码的形式写出来,只讲关键的部分,代码全文地址请跳转:JoySpace.
// 构建预设的Functions
Function functions = 构建预设的Functions(参数:定义语义场景);
// 发起提问
String content1 = 构建普通对话请求(参数:基本参数,问题,functions);
// 解析答案,判断是否命中预设的Functions,继续提问,并获得最终答案
String content2 = 再次构建对话请求(参数:基本参数,问题,functions,上一轮中命中function的返回结果);
我将其中的流程报文都打印出来了,各位可以观察下:
我的问题是: 请为我输出 小米13Pro 这款手机在京东的网页地址。
首次回答内容: Message(role=assistant, content=null, name=null, functionCall=FunctionCallResult(name=search, arguments={
“Keyword”: “小米13Pro”,
“source”: “京东”
}))
基于提问提取GPT理解的问题: {
“Keyword”: “小米13Pro”,
“source”: “京东”
}
最终交互结果: Message(role=assistant, content=小米13Pro在京东的网页地址有多个,以下是其中一些地址:
你可以点击链接查看详细信息。, name=null, functionCall=null)
遇到的问题
其中有一个环节有一点点违背程序员的直观感受,就是 Function的构建,我构建的函数是这样的:
{
"Keyword": {
"type": "string",
"description": "Keyword you want to search, for example: 华为GT2Pro, ViVo手机"
},
"source": {
"type": "string",
"description": "The platform you want to search, for example: 拼多多, 淘宝, 京东"
}
}
它的意思是,需要GPT把我的提问,提取两个字段,一个字段叫 Keyword,一个字段叫 source ,后面是它们的描述。
而GPT是完全基于描述从我的问题中,找到参数的,即上文的:
基于提问提取GPT理解的问题: {
"Keyword": "小米13Pro",
"source": "京东"
}
实际上,我一开始是这么写的:
{
"Keyword": {
"type": "string",
"description": "你想要搜索的关键词,例如: 华为GT2Pro, ViVo手机"
},
"source": {
"type": "string",
"description": "你想要搜索的平台,例如: 拼多多, 淘宝, 京东"
}
}
但是GPT完全无法理解我的用意 😅。
所以为什么Prompt这么重要?
本来在日常的使用中就很能体会到Prompt正确与否,非常影响Ai的智能。
而这次编程的经历更是让我感知到,在现在,想要正确且合理的调用算力,能否让AI理解是核心所在!
稀奇古怪的想法
所以未来AI对某一个Prompt响应非常古怪,我们又能怎么办呢?AI研究员又会怎么去DEBUG呢?非常期待那一天的来临。
最后,感谢Hi-Prompt平台小伙伴们提供了这么棒的工具,用起来非常流畅。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!