开启左侧

LangChain 实践之工具使用

[复制链接]
funingfu 发表于 3 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
参考:LangChain中文入门教程
LangChain官网
通过 Google 搜索并返回答案
  1. import os
  2. os.environ["OPENAI_API_KEY"]="xxx"
  3. os.environ['SERPAPI_API_KEY']="xxx"from langchain.agents import load_tools
  4. from langchain.agents import initialize_agent
  5. from langchain.agents import AgentType
  6. from langchain.llms import OpenAI
  7. # First, let's load the language model we're going to use to control the agent.
  8. llm = OpenAI(temperature=0)# chroma搜索# Next, let's load some tools to use. Note that the `llm-math` tool uses an LLM, so we need to pass that in.
  9. tools = load_tools(["serpapi","llm-math"], llm=llm)# Finally, let's initialize an agent with the tools, the language model, and the type of agent we want to use.
  10. agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)# Now let's test it out!
  11. agent.run("What was the  high temperature in SF yesterday in Fahrenheit? What 42 raised to the .023 power?")
复制代码
关于agent type 几个选项的含义:
    zero-shot-react-description: 根据工具的描述和请求内容的来决定使用哪个工具(最常用)react-docstore: 使用 ReAct 框架和 docstore 交互, 使用Search 和Lookup 工具, 前者用来搜, 后者寻找term, 举例: Wipipedia 工具self-ask-with-search 此代理只使用一个工具: Intermediate Answer, 它会为问题寻找事实答案(指的非 gpt 生成的答案, 而是在网络中,文本中已存在的), 如 Google search API 工具conversational-react-description: 为会话设置而设计的代理, 它的prompt会被设计的具有会话性, 且还是会使用 ReAct 框架来决定使用来个工具, 并且将过往的会话交互存入内存
LangChain 实践之工具使用-1.png


Gradio工具

stable fiffusion作图
  1. from gradio_tools.tools import StableDiffusionTool
  2. local_file_path = StableDiffusionTool().langchain.run("Please create a photo of a fox riding a skateboard")
复制代码
LangChain 实践之工具使用-2.png


构建本地知识库问答机器人
  1. from langchain.embeddings.openai import OpenAIEmbeddings
  2. from langchain.vectorstores import Chroma
  3. from langchain.text_splitter import CharacterTextSplitter
  4. from langchain import OpenAI,VectorDBQA
  5. from langchain.document_loaders import DirectoryLoader
  6. from langchain.chains import RetrievalQA
  7. # 加载文件夹中的所有txt类型的文件
  8. loader = DirectoryLoader('../source_documents/', glob='*.txt')# 将数据转成 document 对象,每个文件会作为一个 document
  9. documents = loader.load()# 初始化加载器
  10. text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)# 切割加载的 document
  11. split_docs = text_splitter.split_documents(documents)# 初始化 openai 的 embeddings 对象
  12. embeddings = OpenAIEmbeddings()# 将 document 通过 openai 的 embeddings 对象计算 embedding 向量信息并临时存入 Chroma 向量数据库,用于后续匹配查询
  13. docsearch = Chroma.from_documents(split_docs, embeddings)# 创建问答对象
  14. qa = VectorDBQA.from_chain_type(llm=OpenAI(), chain_type="stuff", vectorstore=docsearch,return_source_documents=True)# 进行问答
  15. query ="who the little prince meet first"
  16. result = qa({"query": query})print(result)# 链式问答from langchain.chains.question_answering import load_qa_chain
  17. docs = docsearch.similarity_search(query, include_metadata=True)
  18. llm = OpenAI(temperature=0)
  19. chain = load_qa_chain(llm, chain_type="stuff", verbose=True)
  20. chain.run(input_documents=docs, question=query)
复制代码
LangChain 实践之工具使用-3.png


视频问答
  1. # 加载 youtube 频道
  2. loader = YoutubeLoader.from_youtube_url('https://www.youtube.com/watch?v=9qq6HTr7Ocw')
  3. loader = BiliBiliLoader(['https://www.bilibili.com/video/BV1xt411o7Xu/'])# loader = BiliBiliLoader(['https://www.bilibili.com/video/BV1Ch411j7Bb']) Return Empty transcript.# 加载blibili 频道# 将数据转成 document
  4. documents = loader.load()# 初始化文本分割器
  5. text_splitter = RecursiveCharacterTextSplitter(
  6.   chunk_size=1000,
  7.   chunk_overlap=20)# 分割 youtube documents
  8. documents = text_splitter.split_documents(documents)# 初始化 openai embeddings
  9. embeddings = OpenAIEmbeddings()# 将数据存入向量存储
  10. vector_store = Chroma.from_documents(documents, embeddings)# 通过向量存储初始化检索器
  11. retriever = vector_store.as_retriever()
  12. system_template ="""
  13. Use the following context to answer the user's question.
  14. If you don't know the answer, say you don't, don't try to make it up. And answer in Chinese.
  15. -----------
  16. {context}
  17. -----------
  18. {chat_history}
  19. """# 构建初始 messages 列表,这里可以理解为是 openai 传入的 messages 参数
  20. messages =[
  21.   SystemMessagePromptTemplate.from_template(system_template),
  22.   HumanMessagePromptTemplate.from_template('{question}')]# 初始化 prompt 对象
  23. prompt = ChatPromptTemplate.from_messages(messages)# 初始化问答链
  24. qa = ConversationalRetrievalChain.from_llm(ChatOpenAI(temperature=0.1,max_tokens=2048),retriever,condense_question_prompt=prompt)
  25. chat_history =[]whileTrue:
  26.   question =input('问题:')# 开始发送问题 chat_history 为必须参数,用于存储对话历史
  27.   result = qa({'question': question,'chat_history': chat_history})
  28.   chat_history.append((question, result['answer']))print(result['answer'])
复制代码
原文地址:https://blog.csdn.net/weixin_38235865/article/details/130868767
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )