api api.python.langchain.com/en/latest/a…
python langchain官网python.langchain.com/docs/get_st…
langchain github python.langchain.com/docs/get_st…
What is LangChain?
LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。
LangChain有很多核心概念:
1. Components and Chains
在 LangChain 中,Component 是模块化的构建块,可以组合起来创建强大的应用程序。Chain 是组合在一起以完成特定任务的一系列 Components(或其他 Chain)。例如,一个 Chain 可能包括一个 Prompt 模板、一个语言模型和一个输出解析器,它们一起工作以处理用户输入、生成响应并处理输出。
基础Chains
LLM Chain
最基础的一个Chain
Utility Chains
解决数学问题, 根据输入,在prompt里自动增加示例, 将数学问题交给python工具运行, 从而得到数学运算的结果. 还可以请求sql/api等得到结果.
Generic Chains
TransformChain 清理乱格式的文字 ...
复杂Chains
SequentialChain
可构造有向无环调用链, 前面的输出可作为后面的输入.
RouterChain
根据输入的内容判断属于哪种类型, 再根据定义好的路由使用对应的chain调用模型(猜测是根据description选择name, 再根据name选中路由). 会使用到MultiPromptChain
MultiPromptChain
2. Prompt Templates and Values
Prompt Template 为了LLM能更好地理解用户的需求,而建立的输入模板.
例如: 我想让你做一种什么事儿(抽象的); 具体的例子是怎样的; 对输出的结果的要求是什么; 现在请你回答...
PromptValues 是具有方法的类,这些方法可以转换为每个模型类型期望的确切输入类型(如文本或聊天消息)。
3. Example Selectors
当您想要在 Prompts 中动态包含示例时,Example Selectors 很有用。他们接受用户输入并返回一个示例列表以在提示中使用,使其更强大和特定于上下文。
4. Output Parsers
Output Parsers 负责将语言模型响应构建为更有用的格式。它们实现了两种主要方法:一种用于提供格式化指令,另一种用于将语言模型的响应解析为结构化格式。这使得在您的应用程序中处理输出数据变得更加容易。
5. Indexes and Retrievers
Index 是一种组织文档的方式,使语言模型更容易与它们交互。检索器是用于获取相关文档并将它们与语言模型组合的接口。LangChain 提供了用于处理不同类型的索引和检索器的工具和功能,例如矢量数据库和文本拆分器。
6. Chat Message History
LangChain 主要通过聊天界面与语言模型进行交互。ChatMessageHistory 类负责记住所有以前的聊天交互数据,然后可以将这些交互数据传递回模型、汇总或以其他方式组合。这有助于维护上下文并提高模型对对话的理解。 有短期记忆和长期记忆, 如果记忆太大了,会生成摘要信息
7. Agents and Toolkits
Agent 是在 LangChain 中推动决策制定的实体。他可以将用户输入的目标分解成多个过程/子任务, 并且可以访问一套工具(访问天气服务器等)。Tookits 是一组工具,当它们一起使用时,可以完成特定的任务。代理执行器负责使用适当的工具运行代理。
通过理解和利用这些核心概念,您可以利用 LangChain 的强大功能来构建适应性强、高效且能够处理复杂用例的高级语言模型应用程序。
部署
1 安装依赖
安装OpenSSL(如果不使用https则不需要)
编译安装
tar -zxf openssl-1.1.1s.tar.gz
cd openssl-1.1.1s/
./config -fPIC --prefix=/usr/include/openssl enable-shared
make
make install
安装sqlite3 wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
安装Python环境
升级python3【腾讯云默认最新版本为3.6.8,需要手动安装更新版本,否则会报错future feature annotations is not defined】
下载python >= 3.7.0安装包并上传www.python.org/ftp/python/…
解压安装包并执行如下命令
mkdir /usr/local/python3
// 进入 python安装包解压目录后执行
需要修改解压后的python Modules/Setup文件
209 # Socket module helper for SSL support; you must comment out the other
210 # socket line above, and edit the OPENSSL variable:
211 OPENSSL=/usr/include/openssl
212 _ssl _ssl.c \
213 -I$(OPENSSL)/include -L$(OPENSSL)/lib \
214 -lssl -lcrypto
./configure --prefix=/usr/local/python3
make -j && make install
更改环境变量
更改linux的path变量,添加python3
执行 vim ~/.bash_profile,打开配置文件,添加如下配置:
#配置python
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH
保存退出(:wq),执行source ~/.bash_profile命令使配置生效。
执行echo $PYTHON_HOME,查看是否配置成功,如图:
[root@VM-16-3-opencloudos Python-3.10.12]# echo $PYTHON_HOME
/usr/local/python3
[root@VM-16-3-opencloudos Python-3.10.12]# python3 --version
Python 3.10.12
[root@VM-16-3-opencloudos Python-3.10.12]# pip3 --version
pip 23.0.1 from /usr/local/python3/lib/python3.10/site-packages/pip (python 3.10)
[root@VM-16-3-opencloudos Python-3.10.12]#
2 安装langchain & openai
pip3 install langchain
pip3 install openai
3 使用langchain进行openai chat demo示例
import os
from langchain.llms import OpenAI
os.environ["OPENAI_API_KEY"] = 'xxx'
llm = OpenAI(model_name="text-davinci-003", max_tokens=1024)
result = llm("怎么评价人工智能")
print(result)
4 使用langchain进行azure openai调用示例
import os
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2022-12-01"
os.environ["OPENAI_API_BASE"] = "https://makee.openai.azure.com/"
os.environ["OPENAI_API_KEY"] = "9c39b5c77ce34b5cb77b39d513b467bd"
from langchain.llms import AzureOpenAI
llm = AzureOpenAI(deployment_name="makee", model_name="text-davinci-002",)
result = llm("么评价人工智能")
print(result)
5 使用向量存储
因chromadb安装依赖较多且有些依赖需要重新安装python, 可能影响操作系统, 所以改为使用FAISS.
安装faiss
pip install faiss-cpu
注意: python可能是操作系统组件, 一定不要卸载python
yum install libffi-devel sqlite3 # (sqlite3 >= 3.35.0, 直接yum install的版本可能比较低)
pip3 install chromadb tiktoken jq # (使用向量数据库时安装, 如果报错缺少模块_ctypes, 需要先yum install libffi-devel, 再重新安装python3)
测试
from langchain.document_loaders import JSONLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-07-01-preview"
os.environ["OPENAI_API_BASE"] = "https://makee.openai.azure.com"
os.environ["OPENAI_API_KEY"] = "9c39b5c77ce34b5cb77b39d513b467bd"
logger = logging.getLogger("makee.com")
# 初始化向量db
loader = JSONLoader(file_path='resources/santi.json', jq_schema='.[].content')
raw_docs = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=10, chunk_overlap=0)
documents = text_splitter.split_documents(raw_docs)
# 现在embedding对应的部署名是embedding, 模型是text-embedding-ada-002
embeds = OpenAIEmbeddings(deployment='embedding',
model='text-embedding-ada-002',
chunk_size=10)
db = FAISS.from_documents(documents, embeds)
query = "What's Waterdrop?"
docs = db.similarity_search(query)
print(docs)
开发中遇到的问题
The API deployment for this resource does not exist
调用下面的语句后报错
embeds = OpenAIEmbeddings()
db = Chroma.from_documents(documents, embeds)
2023-08-09 10:59:16,556 - openai - DEBUG - message='OpenAI API response' path=https://makee.openai.azure.com//openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-07-01-preview processing_ms=2146.9511 request_id=None response_code=404
2023-08-09 10:59:16,556 - openai - INFO - error_code=DeploymentNotFound error_message='The API deployment for this resource does not exist. If you created the deployment within the last 5 minutes, please wait a moment and try again.' error_param=None error_type=None message='OpenAI API error received' stream_error=False
如此问题原因是
我的langchain版本为0.0.252,改为下面的代码后不再报该错误
embeds = OpenAIEmbeddings(deployment='makee')
db = Chroma.from_documents(documents, embeds)
The embeddings operation does not work with the specified model, gpt-35-turbo
报错语句还是下面的第2句
embeds = OpenAIEmbeddings(deployment='makee')
db = Chroma.from_documents(documents, embeds)
错误详细内容
openai.error.InvalidRequestError: The embeddings operation does not work with the specified model, gpt-35-turbo. Please choose different model and try again. You can learn more about which models can be used with each operation here: https://go.microsoft.com/fwlink/?linkid=2197993.
问题是1.我没有指定使用gpt3.5 2.微软列表里包含gpt3.5
试了使用VectorstoreIndexCreator替换chromadb也没用(VectorstoreIndexCreator)
问题解决了, 原因 embeddings在Azure里申请时有一个对应的部署名和模型名,与聊天模型不同, 因为之前不是我申请的,所以我不清楚,后来确定了一下是部署名错了, 改成申请的部署名和模型名就OK了.