8-langChian开发agent智能体

创建和运行 Agent

单独来说,语言模型无法采取行动 - 它们只能输出文本。

LangChain 的一个重要用例是创建代理。

代理是使用 LLM 作为推理引擎的系统,用于确定应采取哪些行动以及这些行动的输入应该是什么。

然后可以将这些行动的结果反馈给代理,并确定是否需要更多行动,或者是可以结束。

在本次课程中,我们将构建一个可以与多种不同工具进行交互的代理:一个是本地数据库,另一个是搜索引擎。您将能够向该代理提问,观察它调用工具,并与它进行对话。

下面将介绍使用 LangChain 代理进行构建。LangChain 代理适合入门,但在一定程度之后,我们可能希望拥有它们无法提供的灵活性和控制性。要使用更高级的代理,我们建议查看 LangGraph。

概念

我们将涵盖的概念包括:

  • 使用语言模型,特别是它们的工具调用能力
  • 创建检索器以向我们的代理公开特定信息
  • 使用搜索工具在线查找信息
  • 聊天历史,允许聊天机器人“记住”过去的交互,并在回答后续问题时考虑它们。
  • 使用 LangSmith 调试和跟踪您的应用程序

在这里插入图片描述
在这里插入图片描述

from tavily import TavilyClient
tavily_client = TavilyClient()
response = tavily_client.search("Who is Leo Messi?")

print(response)

在这里插入图片描述

# 导入所需模块
# pip install fastembed
#  pip install faiss-cpu

import os

from langchain_core.tools import create_retriever_tool

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
os.environ["TOKENIZERS_PARALLELISM"] = "True"

# 然后继续执行你的代码

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

# 加载文档
loader = TextLoader("../example_data/cat/cat.txt")
documents = loader.load()

# 文本切分
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 嵌入向量表示
# embeddings = OpenAIEmbeddings()
# pip install fastembed
from langchain_community.embeddings import FastEmbedEmbeddings

fastembed = FastEmbedEmbeddings()
vectorstore = FAISS.from_documents(texts, fastembed)  # 使用FAISS向量存储

retriever = vectorstore.as_retriever()
print(retriever.invoke("猫的特征")[0])

retriever_tool = create_retriever_tool(retriever, "serach_badu_baike", "百度百科")

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建代理程序

在这里插入图片描述

# 导入所需模块
# pip install fastembed
#  pip install faiss-cpu

import os

from langchain_community.tools import TavilySearchResults
from langchain_core.tools import create_retriever_tool
from langchain_openai import ChatOpenAI

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
os.environ["TOKENIZERS_PARALLELISM"] = "True"

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.embeddings import FastEmbedEmbeddings

# 加载文档
loader = TextLoader("../example_data/cat/cat.txt")
documents = loader.load()

# 文本切分
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

fastembed = FastEmbedEmbeddings()
vectorstore = FAISS.from_documents(texts, fastembed)  # 使用FAISS向量存储

retriever = vectorstore.as_retriever()
print(retriever.invoke("猫的特征")[0])

retriever_tool = create_retriever_tool(retriever, "serach_badu_baike", "百度百科")

llm = ChatOpenAI(
    model='qwen-plus',
    openai_api_base='https://dashscope.aliyuncs.com/compatible-mode/v1',
    max_tokens=1024
)

search = TavilySearchResults(max_result =1)

tools = [search, retriever_tool]

from langchain import hub
prompt = hub.pull("hwchase17/openai-functions-agent")
print(prompt.messages)

from langchain.agents import create_tool_calling_agent

agent = create_tool_calling_agent(llm, tools, prompt)

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(agent=agent, tools=tools)

print(agent_executor.invoke({"input":"猫的特征,北京的天气"}))

在这里插入图片描述
在这里插入图片描述

{'input': '猫的特征,北京的天气', 'output': '猫的特征如下:\n\n猫有276种不同的面部表情,这些表情可能是在其与人类相处的过程中逐步进化出来的。它们共有26种独特面部动作,如瞳孔放大或收缩、舔鼻子、延长或缩回胡须、不同的耳朵位置等。\n\n猫体型小,体色由蓝灰色到棕黄色不等,身长一般在0.3-0.5米之间。全身毛被密而柔软,锁骨小,吻部短,眼睛圆,颈部粗壮,四肢较短,足下有数个球形肉垫;舌面被有角质层的丝状钩形乳突。雄性头部较为粗圆,个体较大。猫有多种毛色,身形像狸,外貌像老虎,毛柔而齿利(有几乎无毛的品种)。以尾长腰短,目光如金银,上腭棱多的为佳。猫的身体分为头、颈、躯干、四肢和尾五部分,大多数部位披毛,少数为无毛猫。猫的趾底有脂肪质肉垫,因而行走无声,捕鼠时不会惊跑鼠,趾端生有锐利的趾甲。爪能够缩进和伸出。猫在休息和行走时爪缩进去,只在捕鼠和攀爬时伸出来,防止趾甲被磨钝。猫的前肢有五趾,后肢有四趾。猫的牙齿分为门齿、犬齿和臼齿。犬齿特别发达,尖锐如锥,适于咬死捕到的鼠类,臼齿的咀嚼面有尖锐的突起,适于把肉嚼碎;门齿不发达。\n\n北京的天气预报如下:\n\n根据多个来源的数据汇总,近期北京的天气预计会有晴天和多云的情况,气温有所波动。白天最高温度在1℃至14℃之间,夜间最低温度在-10℃至-4℃之间。风向主要为微风,西南风和北风交替出现,风力等级通常小于3级。具体温度和天气情况可能会有所不同,请参考最新的天气预报进行出行计划。'}

在这里插入图片描述
在这里插入图片描述

添加记忆

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 导入所需模块
# pip install fastembed
#  pip install faiss-cpu

import os

from langchain_community.tools import TavilySearchResults
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.tools import create_retriever_tool
from langchain_openai import ChatOpenAI

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
os.environ["TOKENIZERS_PARALLELISM"] = "True"

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.embeddings import FastEmbedEmbeddings

# 加载文档
loader = TextLoader("../example_data/cat/cat.txt")
documents = loader.load()

# 文本切分
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

fastembed = FastEmbedEmbeddings()
vectorstore = FAISS.from_documents(texts, fastembed)  # 使用FAISS向量存储

retriever = vectorstore.as_retriever()
print(retriever.invoke("猫的特征")[0])

retriever_tool = create_retriever_tool(retriever, "serach_badu_baike", "百度百科")

llm = ChatOpenAI(
    model='qwen-plus',
    openai_api_base='https://dashscope.aliyuncs.com/compatible-mode/v1',
    max_tokens=1024
)

search = TavilySearchResults(max_result =1)

tools = [search, retriever_tool]

from langchain import hub
prompt = hub.pull("hwchase17/openai-functions-agent")
print(prompt.messages)

from langchain.agents import create_tool_calling_agent

agent = create_tool_calling_agent(llm, tools, prompt)

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(agent=agent, tools=tools)

store = {}

from langchain_community.chat_message_histories import ChatMessageHistory
def get_session_history(session_id: str) -> BaseChatMessageHistory:
    if(session_id not in store):
        store[session_id] = ChatMessageHistory()
    return store[session_id]
agent_with_chat_history = RunnableWithMessageHistory(agent_executor,
                                                     get_session_history,
                                                     input_messages_key="input",
                                                     history_messages_key="chat_history")

response = agent_with_chat_history.invoke({"input":"his 我的名字是Jack"},
                               config={"configurable":{"session_id":"123"}})
print(response)

response = agent_with_chat_history.invoke({"input":"his 我的名字叫什么"},
                               config={"configurable":{"session_id":"123"}})
print(response)

response = agent_with_chat_history.invoke({"input":"his 我的名字叫什么"},
                               config={"configurable":{"session_id":"456"}})
print(response)
### 创建AI Agent智能体的全面指南 #### 选择合适的开发环境和工具集 对于初学者来说,选择易于上手且功能强大的开发平台至关重要。例如,“灵境Agent”提供了一个无需编写任何代码即可创建AI智能体的方法[^2]。这类平台通常具备直观的图形界面,允许开发者通过拖拽组件来定义智能体的行为逻辑。 #### 定义智能体的目标与应用场景 在启动项目之前,明确智能体的具体用途及其预期解决的问题非常重要。这决定了后续设计阶段的方向以及所需集成的功能模块。无论是用于客户服务支持还是自动化流程处理,清晰的应用场景有助于优化最终产品的性能表现。 #### 利用现成框架加速开发进程 借助成熟的第三方库和服务可以大大缩短研发周期并降低技术门槛。“扣子平台”的优势在于它预置了大量的插件(Agent Tools),使得即便是编程经验不足的人也能快速搭建起具有实用价值的基础版本智能体[^3]。 #### 编写核心算法实现业务逻辑 当选择了适宜的技术栈之后,则需深入研究具体领域内的最佳实践案例作为参考依据。如果目标是构建能够自主学习进化的新一代代理(agent),那么掌握机器学习模型训练技巧将是必不可少的一环[^1]。 ```python import numpy as np from sklearn.model_selection import train_test_split from transformers import Trainer, TrainingArguments, AutoModelForSequenceClassification def prepare_dataset(data): # 数据预处理函数 pass def fine_tune_model(train_data, val_data): model = AutoModelForSequenceClassification.from_pretrained('bert-base-chinese') training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=8, per_device_eval_batch_size=8, warmup_steps=500, weight_decay=0.01, logging_dir='./logs', ) trainer = Trainer( model=model, args=training_args, train_dataset=train_data, eval_dataset=val_data, ) trainer.train() ``` 此段Python代码展示了基于Hugging Face Transformers库微调BERT模型的过程,适用于自然语言理解任务中的分类问题。当然这只是众多可能方案之一,在实际操作过程中还需根据具体情况调整参数配置。 #### 测试迭代直至满足需求标准 完成初步编码工作后,应立即开展严格的测试环节以验证各项指标是否达到预定水平。针对发现的问题及时修正完善,并持续收集反馈意见指导下一步改进方向。 #### 发布部署使智能体投入运行 最后一步就是将精心打磨好的成品推送到生产环境中正式上线服务广大用户群体。考虑到安全性和稳定性因素,建议采用容器化解决方案如Docker配合Kubernetes集群管理器来进行高效运维管理工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值