人工智能 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:用于问答系统

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏晓星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值