使用LangChain在在两套Python环境中执行Skill

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()

执行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值