前言
之前的文章,我们将AutoGen的核心概念AssistantAgent、UserProxyAgent和GroupChatManager都学习了一遍,为AutoGen非常前卫的多代理模式感到震撼!这玩意真能通过chat,组合一堆agents完成复杂任务吗?笔者目前也不确定,就让我们一起慢慢来探索AutoGen这个AI小镇吧。
相比于AutoGen的前卫,LangChain已经有很多朋友将其应用到大型项目中,不怎么存在不确定问题,而且也拥有agent特性。今天的例子,我们将结合AutoGen和LangChain一起来开发一款AI助理程序。看看新旧两派AI应用是如何协作,来各司其职的。
如果您比较喜欢我的文章,欢迎赏个点赞,关注。闭关一年为AI,各位,一起加油。
LangChain
在之前的文章中,多次提到了LangChain。如果您还不了解LangChain,建议您先去看看相关资料。我个人比较推荐吴恩达的《LLM应用程序开发的LangChain》,为避广告之嫌疑,链接我就不给了。
ChromaDB
在项目中,还会用到向量数据库ChromaDB。今天的项目,是经典的LLM专家知识库开发。我们在和知识库chat的时候,会将知识库中的资料和我们的问题都embedding,再计算出他们的相似性,从而为用户基于专业知识库回答问题。ChromaDB相比于以前我们熟悉的MYSQL或NoSQL存的是数据本身,它存储的是embedding, 是专门的embedding查询数据库。
知识库
我们使用的知识库是Uniswap Protocol,即Uniswap的白皮书。作为私有知识库的样本数据,构建一个AI代理。
构建AI助理
今天我们的应用场景,是基于uniswap 的白皮书来构建AI助理。帮助用户完成与uniswap协议知识相关的任务,即专家系统。既然我们使用AutoGen和LangChain一起协同来开发,他们又都是AI开发框架,那么各自负责什么任务呢?
- 各自优势
AutoGen善于对多代理进行调度协同工作,帮助用户完成提出的问题或执行任务;LangChain具有很强的连接外部数据和外部组件的能力。在今天的uniswap专家知识库AI助理系统打造中,正好利用各自的优势,来打造这一功能。如果您对连接外部数据库或embedding不太清楚, 建议先去看看LangChain。
- 安装依赖,使用colab。
python
复制代码%pip install pyautogen~=0.1.0 docker langchain openai tiktoken chromadb pypdf -q -U
其中,tiktoken
是一个由 OpenAI 开发的 Python 库,它可以用来计算一个文本字符串在 GPT-3 模型中会使用多少 tokens。chromadb
是向量数据库,用于存储文章索引,便于多次查询。 PyPDF2
是一个 Python 库,用于处理 PDF 文件。
- 拉取uniswap白皮书
python
复制代码!wget -O uniswap_v3.pdf https://uniswap.org/whitepaper-v3.pdf
使用wget 命令行拉取远程uniswap白皮书文件保存到当前目录下,并命名为uniswap_v3.pdf(如下图)
- 配置autogen config
python复制代码 import autogen # 大家可以使用gpt-4 或其它,我这里用的是3.5, 还能用。
config_list = [ {
'model': 'gpt-3.5-turbo', 'api_key': '' }]
llm_config={
"seed": 42, #为缓存做的配置
"config_list": config_list
}
- 设置openai api-key
lua复制代码import os
os.environ['OPENAI_API_KEY'] = ''
- 引入LangChain 加载文件,并存储embedding索引到chromadb向量数据库
python复制代码# 从langchain的向量存储中导入Chroma, 可以和Chromadb 交互
from langchain.vectorstores import Chroma
# 引入langchain封装的OpenAIEmbeddings
from langchain.embeddings import OpenAIEmbeddings
# langchain读取文件后,做索引前,需要分割文本,然后embedding
from langchain