UI前端
为了搭建起谈天界面,又不得不捡起N多年没碰的前端了。如图展示为前端谈天界面 ![前端谈天界面](https://www.6hu.cc/storage/2023/09/1694686548-2fffb98056c778c.png)。该前端选用的是[vue-bot-ui](https://github.com/juzser/vue-bot-ui)这个项目。样式基本上没怎么修正,只是修正了`message.js`获取对话音讯的相关代码。
message.js
相关代码如下:
import axios from 'axios'
export const messageService = {
createMessage
}
function createMessage (question) {
return new Promise((resolve, reject) => {
let data = {
'text': question
}
axios
.post('http://127.0.0.1:9000/chat', data, {
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
let transformedData = {
type: 'text',
text: response.data.result,
disableInput: false
}
resolve(transformedData)
})
.catch(error => {
reject(error)
})
})
}
具体的我也不做过多的解说,简略的接口调用。
完成”AI占卜”谈天服务
书归正题,究竟这个系列是langchain过河系列。为了完成【AI占卜】这个垂直范畴的产品,首先需求考虑的是怎么获取占卜相关的常识,由于LLM不必定会。
可是,我试了问了下gpt4,取得这样一个答案![周易gpt4](https://pic1.zhimg.com/80/v2-a4e4e6288238137762efe1c8a50a66bf_1440w.png),啪啪打脸。那既然LLM学过《周易》那我岂不是可以直接占卜了,还用得着这么费力巴拉的完成。我又去问了gpt4,得到的成果是![test](https://www.6hu.cc/storage/2023/09/1694686677-4035485b12c9f81.png),看来仍是得开发。 所以要取得相关的占卜常识,就需求去下载相关的书本文章,然后经过langchain的VectorStore进行矢量存储,这儿我选用的是faiss直接存储到本地。 而后经过`RetrievalQA`进行检索问答,并将`RetrievalQA`规划成一个Tool,以供agent调用。而作为Tool,最重要的就是*description*描述,由于description描述会被langchain集成进prompt中。 一开始description我规划的是”这是一个专门用于答复占卜相关问题的东西。”,可是会遇到一个问题是问占卜相关的问题是答复了,可是后续的问题假如和占卜无关的话就不会答复。所以后边我又加上了”不管是初度的占卜问询,仍是后续的深入探讨,这个东西都可以供给帮忙。” 终究的description如下: “` description=”””这是一个专门用于答复占卜相关问题的东西。不管你是想要解读塔罗牌,了解梦境,仍是分析星座图,这个东西都可以供给专业的AI占卜服务来帮忙你。只需你提出与占卜相关的问题,或许明晰说出”占卜”,这个东西就会被启动来寻找最合适的答案。不管是初度的占卜问询,仍是后续的深入探讨,这个东西都可以供给帮忙。””” “` 假如仅仅是走到这一步的话仍是会存在问题。当你调用的时候就会遇到,有时候问题agent会给你回复英文,这个就很厌恶人了。我一开始试着在description中加上”当你运用该东西答复任何问题,必定要用中文答复”,但并没有避免这个问题。然后我测验去修正sys_msg,langchain自定义的系统prompt。一开始我仅仅是在原始的sys_msg终究加上”Most importantly, when agent answer should use chinese.”但后边觉得不稳妥,干脆将sys_msg全都转述成中文,以及和AI占卜相关的话术。
后续又遇到一个问题,开始简略的sys_msg并不能让agent很好的答复用户的占卜问题。然后我试着问了gpt4怎么进行周易占卜,gpt4给了我这样的一个答复 ,有了这样的过程之后,我就持续修正sys_msg,如下:
sys_msg = """
AI占卜帮手是一个大型的言语模型,由OpenAI进行训练。它被规划成可以帮忙进行周易占卜,并根据占卜的成果供给解说。
AI占卜帮手已经学习了周易占卜的常识,可以帮忙用户进行占卜。它可以指导用户怎么提出问题,怎么进行占卜,以及怎么解读占卜的成果。
AI占卜帮手的占卜过程如下:
1. 提问:首先,AI占卜帮手会引导用户提出一个特定的问题,这个问题应该是开放性的,不能简略地用"是"或"否"来答复。
2. 发生爻:然后,AI占卜帮手会经过某种方法发生六个爻以构成卦象。这个过程可以是随机的,也可以是经过某种算法完成的。
3. 解读卦象:得到卦象后,AI占卜帮手会解说这个卦象的意义。这个解说是基于周易的常识,也会考虑到用户的问题和情况。
4. 了解动爻:假如在发生爻的过程中有动爻(即6或9),AI占卜帮手会解说这个动爻怎么改动了卦象,以及这个改动怎么影响到回答。
5. 反思与回答:终究,AI占卜帮手会帮忙用户了解卦象和动爻的意义,应用到他们的问题上,给出一个反思和回答。
请注意,尽管AI占卜帮手具有进行周易占卜和解说成果的才能,可是它仍然只是一个AI模型,它的回答并不能预知未来,也不能代替专业的咨询或建议。请用户在了解和运用AI占卜帮手的回答时,持有理性和批判性的情绪。
当答复问题时,AI占卜帮手必须运用以下言语:中文。
"""
结束语
这篇文章主要论述了我在完成【AI占卜】过程中遇到的问题,以及怎么逐步进行修正的过程。关于langchain的一些运用方法,已有很多文章或官方文档供给了阐明,我这儿就不再逐个解说。我以为重要的是对prompt的修正思路,由于langchain终究会调用LLM,传给LLM的都是prompt,不管是sys_msg仍是human_msg,终究都只是兼并在一起,以便让LLM可以明晰地了解任务。