- LangChain & OpenAI & python & pinecone
- 这里没有多余的代码,没有复杂的配置。
- 只有用最精简的代码演示LangChain的部分基础功能,
- 极大地帮助你理解LangChain,构建自己的AI应用。
- 1.完成一次问答。
- 2.读取本地材料并做出总结。
- 3.将数据插入向量数据库。
- 4.检索向量数据库中,从中得知问题参考了哪些向量数据。
- 5.根据提示词完成回答。
- 6.根据导入的数据 完成回答。
- 7.拥有记忆的聊天。
- 8.用顺序链完成连续的任务。
- 9.代理基本用例。
LangChain是一个AI应用开发框架,用来简化使用大语言模型来赋能应用程序。核心思想是将不同的组件连接在一起,如提示模板、大语言模型、代理、记忆、数据库等。
- 从指定源进行加载数据,比如:txt格式,markdown格式,任意的网页 UnstructuredHTMLLoader、PDF PyPDFLoader、印象笔记 EverNoteLoader,当使用loader加载器读取到数据源后,数据源需要转换成 Document 对象后,后续才能进行使用。
- 不管是把文本当作prompt发给openai api,还是还是使用openai api embedding功能都是有字符限制的。比如将一份300页的pdf发给openai api,让他进行总结,他肯定会报超过最大Token错。所以这里就需要使用文本分割器去分割loader进来的 Document。
- 数据相关性搜索其实是向量运算。不管是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将加载进来的数据进行向量化,才能进行向量运算搜索。
- 可以把 Chain 理解为任务。一个 Chain 就是一个任务,当然也可以像链条一样,一个一个的执行多个链。
- 可理解为将数据转换为向量的过程。
- OpenAI - LLMs
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-ada-001", openai_api_key=openai_api_key)
llm("What day comes after Friday?")
- ChatOpenAI - ChatModels
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage
chat = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=0.5, openai_api_key=openai_api_key)
# 提供相关配置
chat(
[
SystemMessage(content="You are elon musk,you must act as him"),
HumanMessage(content="who are you?")
]
)
# 作为一个大模型参数
llm_chain = LLMChain(llm=chat, prompt=prompt,memory=memory)
llm_chain.run("who are you?")
- OpenAIEmbeddings
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
text = "Hi! It's time for the beach"
text_embedding = embeddings.embed_query(text)
- PromptTemplate
from langchain.llms import OpenAI
from langchain import PromptTemplate
llm = OpenAI(model_name="text-davinci-003", openai_api_key=openai_api_key)
template = """
I really want to travel to {location}. What should I do there?
Respond in one short sentence
"""
prompt = PromptTemplate(
input_variables=["location"],
template=template,
)
final_prompt = prompt.format(location='GuangZhou')
llm(final_prompt)
- document_loaders
from langchain.document_loaders import UnstructuredPDFLoader,UnstructuredURLLoader,HNLoader
# UnstructuredPDFLoader
from langchain.document_loaders import UnstructuredPDFLoader
loader = UnstructuredPDFLoader("example_data/layout-parser-paper.pdf")
data = loader.load()
# UnstructuredURLLoader
urls = [
"https://www.understandingwar.org/backgrounder/russian-offensive-campaign-assessment-february-8-2023",
"https://www.understandingwar.org/backgrounder/russian-offensive-campaign-assessment-february-9-2023"
]
loader = UnstructuredURLLoader(urls=urls)
data = loader.load()
- SimpleSequentialChain
# 提供菜式的交互链
prompt_template = PromptTemplate(input_variables=["user_location"], template=template)
location_chain = LLMChain(llm=llm, prompt=prompt_template)
# 提供菜谱的交互链
prompt_template = PromptTemplate(input_variables=["user_meal"], template=template)
meal_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(chains=[location_chain, meal_chain], verbose=True)
review = overall_chain.run("GuangZhou")
- load_qa_chain
from langchain.llms import OpenAI
from langchain.chains.question_answering import load_qa_chain
chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff", memory=memory,prompt=memory)
query = "who is elon musk?"
chain.run(input_documents=docs, question=query)
agent = initialize_agent(
agent="zero-shot-react-description",
tools=[wa_tool, search_tool],
llm=llm,
verbose=True,
)
r_1 = agent("how much is bitcoin price right now?")
r_2 = agent("Integral of x * (log(x)^2)")