【博学谷学习记录】超强总结,用心分享丨人工智能 LLM LangChain的一些小例子

目录

    • 前提
    • 问答
    • 模型+联网搜索
    • 长文本总结

前提

OpenAI api还有额度,否则会报错:
Error Code 429 - You exceeded your current quota, please check your plan and billing details.

https://help.openai.com/en/articles/6891831-error-code-429-you-exceeded-your-current-quota-please-check-your-plan-and-billing-details

刚发现我额度过期了,暂不贴运行结果了

问答

用 LangChain 加载 OpenAI 的模型,并且完成一次问答

import os
from langchain.llms import OpenAI

os.environ["OPENAI_API_KEY"] = 'sk-UWc6x**********iGUuGT3BlbkFJ18eb0jpOFCPNKiyqLZpI'

llm = OpenAI(model_name="text-davinci-003", max_tokens=1024)
llm("怎么评价人工智能")

模型+联网搜索

通过 Google 搜索并返回答案

import os

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
from langchain.agents import AgentType

os.environ["OPENAI_API_KEY"] = 'sk-********************************'
os.environ["SERPAPI_API_KEY"] = '49da8858d587cb5e5f1452c224421d7084a********************************'

# 加载 OpenAI 模型
llm = OpenAI(temperature=0,max_tokens=2048) 

 # 加载 serpapi 工具
tools = load_tools(["serpapi"])

# 如果搜索完想再计算一下可以这么写
# tools = load_tools(['serpapi', 'llm-math'], llm=llm)

# 如果搜索完想再让他再用python的print做点简单的计算,可以这样写
# tools=load_tools(["serpapi","python_repl"])

# 工具加载后都需要初始化,verbose 参数为 True,会打印全部的执行详情
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# 运行 agent
agent.run("What's the date today? What great events have taken place today in history?")

AgentType

  • 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 框架来决定使用来个工具, 并且将过往的会话交互存入内存

长文本总结

import os

from langchain.document_loaders import UnstructuredFileLoader
from langchain.chains.summarize import load_summarize_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain import OpenAI

os.environ["OPENAI_API_KEY"] = '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'

# 导入文本
loader = UnstructuredFileLoader("abc.txt")
# 将文本转成 Document 对象
document = loader.load()
print(f'documents:{len(document)}')

# 初始化文本分割器
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 500,
    chunk_overlap = 0
)

# 切分文本
split_documents = text_splitter.split_documents(document)
print(f'documents:{len(split_documents)}')

# 加载 llm 模型
llm = OpenAI(model_name="text-davinci-003", max_tokens=1500)

# 创建总结链
chain = load_summarize_chain(llm, chain_type="refine", verbose=True)

# 执行总结链
chain.run(split_documents[:5])

text_splitter的chunk_overlap参数
这个是指切割后的每个 document 里包含几个上一个 document 结尾的内容

text_splitter

https://python.langchain.com/en/latest/modules/indexes/text_splitters.html

chain 的 chain_type参数
stuff:这种最简单粗暴,会把所有的 document 一次全部传给 llm 模型进行总结
map_reduce:分割后的每个Document分别进行总结,然后对所有Document总结的结果再进行总结
refine:总结后一个 document 的时候,会带着前一个的 document 进行总结,给需要总结的 document 添加了上下文,增加了总结内容的连贯性。
map_rerank:用于问答系统

总结:了解了一下使用,通过使用进一步加深对相关概念的理解

你可能感兴趣的:(学习,人工智能,深度学习,LLM)