title: 用 LangChain 构建基于资料库的问答机器人(四):通过代理使用外部工具

上一篇教程我们介绍了 ReAct 系统,这是一个非常强大的行为模式,但它需要编写大量的示例来告诉 LLM 如何思考、行动,并且为了遵循这个模式,还需要编写代码来分析生成文字、调用函数、拼接 prompt 等,这些工作都是十分繁琐且冗长的。而 LangChain 帮我们把这些步骤都隐藏起来了,将这一系列动作都封装成 “代理”,我们只需要提供有那些工具可以使用,以及这些工具的功能,就可以让 LLM 自动完成这些工作了。这样我们的代码就会变得简洁、易读,并且拥有更高的灵活性。

代理(Agent)

所谓代理,就是将一系列的行为和可以使用的工具封装起来,让我们可以通过一个简单的接口来调用这些动作,而不需要关心这些动作是如何完成的。这样可以让我们的代码更简洁、易读,并且拥有更高的灵活性。接下来我们就结合 ReAct 和向量数据库来介绍代理的使用。

准备工作

和之前一样,我们先设置环境变量。

# set the environment variables needed for openai package to know to reach out to azure
import os

os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_BASE"] = "https://<your-endpoint.openai.azure.com/"
os.environ["OPENAI_API_KEY"] = "your AzureOpenAI key"
os.environ["OPENAI_API_VERSION"] = "2023-03-15
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于neo4j的古诗词问答系统机器人的代码涉及到多个方面,包括数据处理、问答逻辑、图数据库操作等。下面是一个简单的实现示例: 1. 数据处理 首先需要准备好古诗词的数据集,可以从开放的数据源中获取或自行收集整理。对于每首诗词,需要提取出它的标题、作者、内容等关键信息,并将它们存储到neo4j图数据库中。可以通过Python编写程序实现数据导入,具体代码如下: ```python from py2neo import Graph, Node graph = Graph('http://localhost:7474', auth=('neo4j', 'password')) # 读取古诗词数据集,格式为json with open('poems.json', 'r', encoding='utf-8') as f: poems = json.load(f) # 遍历每首诗词,创建节点并添加到图数据库中 for poem in poems: node = Node('Poem', title=poem['title'], author=poem['author'], content=poem['content']) graph.create(node) ``` 2. 问答逻辑 在图数据库中存储了古诗词的基本信息后,就可以通过Cypher语句实现问答逻辑。例如,对于“请问李白的《将进酒》中‘君不见黄河之水天上来’的下一句是什么?”这个问题,可以通过以下Cypher语句查询答案: ```cypher MATCH (p:Poem {author:'李白', title:'将进酒'}) WHERE p.content CONTAINS '君不见黄河之水天上来' RETURN substring(p.content, apoc.text.indexOf(p.content, '君不见黄河之水天上来') + size('君不见黄河之水天上来'), apoc.text.indexOf(p.content, '君不见黄河之水天上来') + size('君不见黄河之水天上来') + 5) ``` 该Cypher语句首先匹配标题为《将进酒》且作者为李白的古诗词,然后查找包含“君不见黄河之水天上来”的内容,并返回该内容后面的5个字符,即下一句的开头。 3. 图数据库操作 最后,需要编写Python程序实现与neo4j图数据库交互的功能。可以使用py2neo库来实现这一功能,具体代码如下: ```python from py2neo import Graph graph = Graph('http://localhost:7474', auth=('neo4j', 'password')) def query_answer(question): # 解析问题,生成Cypher语句 cypher = generate_cypher(question) # 执行Cypher语句,获取答案 result = graph.run(cypher).data() if result: return result[0] else: return None ``` 在实现时,需要注意对输入问题进行解析和生成Cypher语句的过程,以及返回结果的格式化等问题。完整的代码可以根据实际需求进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值