1 执行Skill
使用LangChain中的DeepAgents在两套Python环境中执行skill,宿主机Python环境执行LangChain,Skill的Python环境执行Skill的代码,两套环境互不干扰。
参考地址
https://docs.langchain.com/oss/python/deepagents/overview
2 源代码
"""
此代码有多个功能点
1 指定自定义的虚拟环境,两套Python环境包括执行LangChain的宿主机环境和执行Skills的虚拟环境 ;
2 限制Skills的工作目录;
3 使用LocalShellBackend支持Skill执行代码;
"""
import os
from pathlib import Path
from deepagents import create_deep_agent
from deepagents.backends import LocalShellBackend
from langchain_core.messages import BaseMessage
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import InMemorySaver
# 显示日志信息
from langchain_core.globals import set_debug
# 可以不使用
# 开启全局调试
set_debug(True)
# 默认可以不使用,长记忆可记录用户历史数据
# 添加记忆,InMemorySaver和MemorySaver相同,指向同一个类
checkpointer = InMemorySaver()
# 配置模型
llm = ChatOpenAI(
# 配置模型
# model="kimi-k2.6",
model="kimi-k2.7-code",
# 修改这里指向第三方地址
base_url="https://api.moonshot.cn/v1",
# 传入对应的 API Key
api_key=""
)
# 设置虚拟环境
VENV_PATH = "D:\\python312env\\pytranslate"
python_vir_env = {
# Windows下将Scripts目录添加到PATH最前面
"PATH": f"{os.path.join(VENV_PATH, 'Scripts')};{os.environ.get('PATH', '')}",
"VIRTUAL_ENV": VENV_PATH,
# 清空 PYTHONHOME,避免干扰虚拟环境
"PYTHONHOME": "", #
}
# 目标工作目录
target_work_dir = Path("E:/data/mydir")
# LocalShellBackend是FilesystemBackend 的功能增强版,它在后者的文件读写能力之上,额外赋予了 Agent 执行任意 Shell 命令的能力
beckend = LocalShellBackend(
# 限制工作目录
root_dir=target_work_dir,
# 限制智能体的工作范围是否只能在root_dir下
virtual_mode=True,
# virtual_mode=False,
env=python_vir_env,
inherit_env=False
)
# 设置Skills路径
# 下面的Skill是我在网上查找的翻译PDF的skill,支持skill代码执行、解析文档等
skill_path = str(target_work_dir.joinpath("/skills/pdf-translate"))
# 创建智能体
agent = create_deep_agent(
# 设置大模型
model=llm,
# 使用本地Skill
backend=beckend,
# 调用skills
skills=[skill_path],
# 添加记忆功能
checkpointer=checkpointer
)
# 执行智能体
result = agent.invoke(
input={
"messages": [
{
"role": "user",
"content": "在window环境下,翻译这个PDF: ./test3.pdf"
}
]
},
# 管理记忆和线程
config={"configurable": {"thread_id": "12345"}}
)
# 获取返回值
for item in result.get('messages'):
item_obj: BaseMessage = item
print(item_obj.content)
print()
执行结果


879

被折叠的 条评论
为什么被折叠?



