重塑Excel的智慧边界:ExcelAgentTemplate架构深度解析与LLM集成最佳实践

"在数据驱动的时代,Excel不再只是表格工具,它正在成为连接传统办公与人工智能的桥梁。"

前言:当表格遇上AI大脑

在数字化转型的浪潮中,我们常常听到这样的故事:某个财务经理每天需要处理上千家公司的财务数据,手动查询企业信息、整理报告,直到深夜才能完成工作。而现在,只需要在Excel中输入一个函数 =RunAgent("调查" & A1 & "公司的员工数量"),AI助手就能自动完成这些繁琐的工作。

这不是科幻小说的情节,而是ExcelAgentTemplate项目带来的现实变革。今天,我们将深入这个项目的技术内核,揭示它如何巧妙地将大语言模型(LLM)的智慧注入到Excel的每一个单元格中。

一、项目概览:重新定义Excel的可能性

1.1 设计理念:让AI像公式一样简单

ExcelAgentTemplate的核心理念可以用一句话概括:"让AI变得像Excel公式一样简单易用"。这个项目并非简单地在Excel中嵌入聊天机器人,而是将LLM的能力原生化地融入到Excel的工作流中。

想象一下,当你在Excel中输入 =SUM(A1:A10) 来计算求和时,现在你同样可以输入 =RunAgent("分析这些数据的趋势") 来获得AI驱动的数据洞察。这种设计哲学体现了项目团队对用户体验的深刻理解:降低AI使用门槛,而不是增加学习成本

1.2 架构全貌:分布式智能的精妙设计

ExcelAgentTemplate采用了一种优雅的分离式架构,主要由三个核心组件构成:

复制代码
Excel前端 ↔ C# Excel Add-in ↔ Python FastAPI后端 ↔ LangChain Agent
                                                    ↓
                                            OpenAI API + Tavily搜索

这种架构的巧妙之处在于职责分离的清晰性

  • Excel层专注于用户界面和数据呈现

  • C#层负责Excel与Python的通信桥接

  • Python层承载AI智能和业务逻辑

二、技术架构深度剖析

2.1 Excel Add-in层:无缝集成的艺术

Excel-DNA:.NET生态的完美选择

项目选择Excel-DNA作为Add-in开发框架,这个选择颇具匠心。Excel-DNA是一个轻量级的.NET框架,专门为Excel插件开发而生。相比于VSTO(Visual Studio Tools for Office),Excel-DNA具有以下显著优势:

  1. 部署简单:单一.xll文件即可完成部署,无需复杂的安装程序

  2. 性能优异:直接与Excel的COM接口交互,避免了额外的抽象层

  3. 兼容性强:支持从Excel 2007到最新版本的广泛兼容

异步处理:响应性能的核心保障

让我们深入分析RunAgent.cs中的核心实现:

复制代码
[ExcelFunction(Name = "RunAgent", Description = "Excel から AI エージェントを非同期に実行します。")]
public static object RunAgent(
    string inputMessage,
    string model = "gpt-4-turbo-preview",
    string serverUrl = "http://localhost:8889/chat")
{
    return AsyncTaskUtil.RunTask(
        "RunAgent",
        new object[] { inputMessage, serverUrl, model }, 
        async () => {
            return await RunAgentAsync(inputMessage, model, serverUrl);
        });
}

这段代码的精妙之处在于异步任务的优雅封装AsyncTaskUtil.RunTask是Excel-DNA提供的异步处理工具,它解决了一个关键问题:如何在Excel的单线程UI环境中优雅地处理长时间运行的AI任务

当用户调用RunAgent函数时,Excel会立即返回#N/A占位符,然后在后台异步执行AI请求。这种设计避免了Excel界面冻结,用户可以继续进行其他操作,当AI处理完成后,结果会自动更新到相应的单元格中。

字符串处理:跨语言通信的细节关怀

在Excel与Python的通信过程中,字符串编码处理是一个容易被忽视但极其重要的细节:

复制代码
private static string ConvertExcelStringToJsonString(string text)
{
    text = text.Replace("\\", "\\\\");
    text = text.Replace("\"", "\\\"");
    text = text.Replace("\b", "\\b");
    text = text.Replace("\r", "\\r");
    text = text.Replace("\n", "\\n");
    text = text.Replace("\t", "\\t");
    text = text.Replace("\f", "\\f");
    return text;
}

这个看似简单的函数背后,体现了开发团队对跨平台兼容性的深刻理解。Excel中的字符串可能包含各种特殊字符,如果不进行正确的转义处理,就会导致JSON解析失败,进而影响整个系统的稳定性。

2.2 Python后端层:智能服务的核心引擎

FastAPI:现代Web框架的最佳选择

后端选择FastAPI作为Web框架,这个决策体现了技术选型的前瞻性:

复制代码
from fastapi import FastAPI
from pydantic import BaseModel, Field

class ChatInput(BaseModel):
    message: str = Field(description="ユーザーからのメッセージです。")
    model: str = Field("gpt-4-turbo-preview", description="使用するモデルの名前です。")

app = FastAPI()

@app.post("/chat")
async def chat(chat_input: ChatInput):
    result = await chat_internal(chat_input)
    return result

FastAPI的选择理由包括:

  1. 类型安全:基于Python类型提示的自动验证和文档生成

  2. 异步支持:原生支持async/await,完美匹配AI API的异步特性

  3. 性能优异:基于Starlette和Pydantic,性能媲美Node.js和Go

  4. 开发效率:自动生成OpenAPI文档,简化API测试和集成

LangChain:AI应用开发的瑞士军刀

LangChain在项目中的运用堪称教科书级别的最佳实践:

复制代码
from langchain_openai.chat_models import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain import hub

# 工具配置:为AI配备"外部感知器官"
web_search_tools = [
    TavilySearchResults(
        description="搜索引擎工具,优化用于获取全面、准确、可信的结果。",
        max_results=10,
        verbose=True
    ),
]

# Agent创建:构建智能决策核心
agent = create_openai_tools_agent(
    llm=ChatOpenAI(model=chat_input.model),
    tools=web_search_tools,
    prompt=hub.pull("hwchase17/openai-tools-agent")
)

# 执行器配置:智能与工具的协调者
chain = AgentExecutor(
    agent=agent, 
    tools=web_search_tools,
    handle_parsing_errors=True,
    max_iterations=30, 
    verbose=True
)

这段代码展现了LangChain框架的核心价值:将复杂的AI应用开发简化为模块化的组件组装。每个工具都是一个独立的能力模块,Agent负责智能地选择和组合这些工具来完成复杂任务。

缓存策略:性能优化的智慧结晶

项目采用了joblib的Memory进行缓存,这是一个颇具深度的技术决策:

复制代码
from joblib import Memory

whole_chain_cache_memory = Memory(DEFAULT_CACHE_DIR)

@whole_chain_cache_memory.cache
async def chat_internal(chat_input: ChatInput):
    # AI处理逻辑
    pass

为什么不使用LangChain的内置缓存?

开发者在代码注释中给出了明确解释:LangChain的缓存机制只能缓存LLM的输入输出,但无法缓存整个Chain的执行结果。对于包含网络搜索、数据处理等复杂步骤的Agent来说,缓存整个执行链的结果更有价值。

这种缓存策略带来的性能提升是显著的:

  • 首次查询:可能需要10-30秒完成网络搜索和AI推理

  • 缓存命中:响应时间降低到毫秒级别

2.3 通信机制:HTTP API的优雅设计

RESTful API:简单而强大

项目采用标准的RESTful API进行通信,接口设计简洁明了:

复制代码
POST /chat
Content-Type: application/json

{
    "message": "用户输入的查询内容",
    "model": "gpt-4-turbo-preview"
}

这种设计的优势在于:

  1. 标准化:遵循REST规范,易于理解和扩展

  2. 语言无关:任何支持HTTP的语言都可以轻松集成

  3. 调试友好:可以使用标准的HTTP调试工具进行测试

超时处理:稳定性的重要保障
复制代码
HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(1000 * 60 * 10); // 10分钟超时

10分钟的超时设置体现了对AI应用特性的深刻理解。与传统的Web应用不同,AI驱动的查询可能涉及:

  • 多轮网络搜索

  • 大量文本的LLM处理

  • 复杂的推理链

合理的超时设置确保了系统的稳定性,同时给予AI足够的处理时间。

三、核心技术选型分析

3.1 LLM选择:OpenAI GPT系列的战略考量

项目默认使用gpt-4-turbo-preview,这个选择背后有深层的技术考量:

能力平衡:推理与效率的最佳结合点

GPT-4 Turbo相比于其他模型具有以下优势:

  • 上下文长度:128K tokens的超大上下文窗口,支持复杂的多步推理

  • 知识更新:训练数据截止到2024年4月,包含最新的世界知识

  • 工具使用:对Function Calling的支持更加完善和稳定

  • 成本效率:相比GPT-4,价格降低了50%以上

可配置性:为未来扩展预留空间
复制代码
class ChatInput(BaseModel):
    message: str = Field(description="用户消息")
    model: str = Field("gpt-4-turbo-preview", description="可配置的模型名称")

这种设计允许用户根据具体需求选择不同的模型:

  • 简单查询 :使用gpt-3.5-turbo降低成本

  • 复杂分析 :使用gpt-4获得更好的推理能力

  • 未来扩展:支持Claude、Gemini等其他模型

3.2 搜索引擎:Tavily vs传统搜索API

项目选择Tavily而非Google Search API或Bing API,这个决策颇具前瞻性:

Tavily的独特优势
  1. LLM优化:专门为AI应用设计,返回的结果更适合LLM处理

  2. 结构化数据:提供清洁、结构化的搜索结果,减少噪音

  3. 上下文感知:能够理解搜索意图,返回更相关的结果

  4. API稳定性:相比于需要复杂配置的Google API,Tavily更加简单可靠

四、使用场景深度分析

4.1 数据收集与分析:自动化的数据侦探

场景一:企业尽职调查

想象一个投资分析师需要研究100家潜在投资目标的基本信息。传统方式需要:

  1. 手动搜索每家公司的官网

  2. 查找财务报告和新闻

  3. 整理信息到Excel表格

  4. 重复99次...

使用ExcelAgentTemplate后:

A列:公司名称 B列:基本信息收集 C列:员工规模 D列:最新动态
Apple Inc. =RunAgent("收集" & A2 & "的基本信息,包括成立时间、主营业务、总部位置") =RunAgent("查询" & A2 & "的员工数量") =RunAgent("搜索" & A2 & "最近6个月的重要新闻")

一个下午就能完成原本需要数周的工作量。

场景二:市场研究自动化

市场研究人员经常需要分析竞争对手的产品特性、定价策略等信息:

复制代码
=RunAgent("分析以下竞争对手的产品特点并制作对比表:" & 
          "1. " & A2 & 
          "2. " & A3 & 
          "3. " & A4 & 
          "要求:包括价格、核心功能、目标用户群体")

4.2 内容创作与翻译:创意工作的AI助手

多语言内容本地化

对于跨国企业,产品描述的多语言翻译是一项巨大的工作量:

A列:原文(中文) B列:英文翻译 C列:日文翻译 D列:德文翻译
智能手机充电器 =RunAgent("将'" & A2 & "'翻译成专业的英文产品描述") =RunAgent("将'" & A2 & "'翻译成日文,要求符合日本市场习惯") =RunAgent("将'" & A2 & "'翻译成德文商业用语")

4.3 风险控制与合规检查:智能审计助手

供应商资质验证

采购部门需要验证供应商的资质和信誉:

复制代码
=RunAgent("验证供应商'" & A2 & "'的以下信息:" &
          "1. 营业执照状态 " &
          "2. 近3年是否有违法记录 " &
          "3. 行业评价和信誉度 " &
          "4. 主要客户案例")

五、性能优化策略与最佳实践

5.1 缓存机制的深度优化

智能缓存策略

项目的缓存机制不仅仅是简单的结果存储,还包含了智能的缓存策略:

复制代码
# 缓存键值的智能生成
def generate_cache_key(chat_input: ChatInput):
    import hashlib
    content = f"{chat_input.message}_{chat_input.model}"
    return hashlib.md5(content.encode()).hexdigest()

# 支持缓存失效策略
@whole_chain_cache_memory.cache
async def chat_internal(chat_input: ChatInput):
    # 对于时效性要求高的查询,可以设置缓存过期时间
    if "最新" in chat_input.message or "今日" in chat_input.message:
        # 实时查询,不使用缓存
        return await fresh_query(chat_input)
    else:
        # 使用缓存查询
        return await cached_query(chat_input)

5.2 错误处理与恢复机制

渐进式降级策略
复制代码
async def robust_chat_internal(chat_input: ChatInput):
    try:
        # 尝试使用完整的Agent功能
        return await full_agent_process(chat_input)
    except OpenAIError as e:
        # OpenAI API错误,尝试使用备用模型
        chat_input.model = "gpt-3.5-turbo"
        return await fallback_agent_process(chat_input)
    except TavilyError as e:
        # 搜索服务错误,使用仅LLM模式
        return await llm_only_process(chat_input)
    except Exception as e:
        # 其他错误,返回友好的错误信息
        return f"处理您的请求时遇到了问题:{str(e)}"

六、扩展性设计与未来展望

6.1 插件化架构的设想

工具插件系统

未来的ExcelAgentTemplate可以支持插件化的工具扩展:

复制代码
from abc import ABC, abstractmethod

class AgentTool(ABC):
    @abstractmethod
    def get_name(self) -> str:
        pass
    
    @abstractmethod
    def get_description(self) -> str:
        pass
    
    @abstractmethod
    async def execute(self, input_data: str) -> str:
        pass

class DatabaseQueryTool(AgentTool):
    def get_name(self) -> str:
        return "database_query"
    
    def get_description(self) -> str:
        return "查询数据库获取结构化数据"
    
    async def execute(self, query: str) -> str:
        # 实现数据库查询逻辑
        pass

6.2 技术演进路线图

短期目标(3-6个月)
  1. 本地LLM支持:集成Ollama、LM Studio等本地部署方案

  2. Excel Online支持:扩展到Web版Excel

  3. 批量处理优化:提升大数据集处理性能

  4. 可视化图表生成:AI驱动的图表创建功能

中期目标(6-12个月)
  1. 多模态支持:图像、语音输入处理

  2. 实时协作:多用户同时编辑支持

  3. 企业级安全:SSO、LDAP集成

  4. 移动端支持:iOS/Android Excel应用集成

长期愿景(1-2年)
  1. AI工作流引擎:复杂业务流程自动化

  2. 自然语言编程:用自然语言创建Excel宏

  3. 预测性分析:基于历史数据的智能预测

  4. 跨应用集成:与PowerBI、Teams等深度集成

6.3 行业影响与应用前景

数字化转型加速器

ExcelAgentTemplate代表了一种新的数字化转型模式:渐进式AI集成。与完全替换现有工具不同,它选择了增强现有工具的路径。这种方式具有以下优势:

  1. 学习成本低:用户无需学习全新的工具

  2. 风险可控:可以逐步引入AI功能

  3. 兼容性强:与现有工作流程完美结合

  4. 投资保护:充分利用现有的Excel技能和数据

行业应用案例展望

金融行业

  • 风险评估自动化

  • 合规检查智能化

  • 投资研究效率提升

制造业

  • 供应链分析优化

  • 质量控制自动化

  • 设备维护预测

零售业

  • 市场趋势分析

  • 库存优化建议

  • 客户行为洞察

医疗健康

  • 临床数据分析

  • 药物研发支持

  • 患者数据管理

七、安全性考虑与合规要求

7.1 数据安全与隐私保护

敏感信息过滤

在处理企业数据时,数据安全是重中之重。ExcelAgentTemplate需要建立完善的敏感信息过滤机制:

复制代码
import re
from typing import List

class DataSanitizer:
    def __init__(self):
        # 定义敏感信息模式
        self.patterns = {
            'email': r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
            'phone': r'\b\d{3}-\d{3}-\d{4}\b',
            'ssn': r'\b\d{3}-\d{2}-\d{4}\b',
            'credit_card': r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b'
        }
    
    def sanitize_input(self, text: str) -> str:
        """清理输入中的敏感信息"""
        sanitized = text
        for pattern_name, pattern in self.patterns.items():
            sanitized = re.sub(pattern, f'[{pattern_name.upper()}_REDACTED]', sanitized)
        return sanitized
    
    def check_compliance(self, text: str) -> List[str]:
        """检查是否包含敏感信息"""
        violations = []
        for pattern_name, pattern in self.patterns.items():
            if re.search(pattern, text):
                violations.append(pattern_name)
        return violations

7.2 访问控制与权限管理

基于角色的访问控制(RBAC)
复制代码
from enum import Enum

class UserRole(Enum):
    VIEWER = "viewer"
    ANALYST = "analyst"
    ADMIN = "admin"

class Permission(Enum):
    READ_DATA = "read_data"
    WRITE_DATA = "write_data"
    SEARCH_WEB = "search_web"
    ADMIN_FUNCTIONS = "admin_functions"

class RBACManager:
    def __init__(self):
        self.role_permissions = {
            UserRole.VIEWER: {Permission.READ_DATA},
            UserRole.ANALYST: {Permission.READ_DATA, Permission.WRITE_DATA, Permission.SEARCH_WEB},
            UserRole.ADMIN: {Permission.READ_DATA, Permission.WRITE_DATA, 
                           Permission.SEARCH_WEB, Permission.ADMIN_FUNCTIONS}
        }
    
    def check_permission(self, user_role: UserRole, required_permission: Permission) -> bool:
        return required_permission in self.role_permissions.get(user_role, set())
    
    def get_allowed_tools(self, user_role: UserRole) -> List[str]:
        """根据用户角色返回允许使用的工具"""
        tools = []
        permissions = self.role_permissions.get(user_role, set())
        
        if Permission.SEARCH_WEB in permissions:
            tools.append("web_search")
        if Permission.WRITE_DATA in permissions:
            tools.append("data_modification")
        
        return tools

八、部署与运维最佳实践

8.1 容器化部署

Docker配置优化
复制代码
FROM python:3.10-slim

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .
COPY pyproject.toml .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 创建非root用户
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
USER appuser

# 健康检查
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8889/health || exit 1

# 暴露端口
EXPOSE 8889

# 启动命令
CMD ["python", "langchain_fastapi.py", "--host", "0.0.0.0", "--port", "8889"]

8.2 监控与日志

结构化日志
复制代码
import logging
import json
from datetime import datetime

class StructuredLogger:
    def __init__(self, service_name: str = "excel-agent"):
        self.service_name = service_name
        self.logger = logging.getLogger(service_name)
    
    def log_request(self, user_id: str, request_data: dict, response_time: float, status: str):
        log_entry = {
            "timestamp": datetime.utcnow().isoformat(),
            "service": self.service_name,
            "event_type": "api_request",
            "user_id": user_id,
            "request_size": len(str(request_data)),
            "response_time": response_time,
            "status": status,
            "metadata": {
                "model": request_data.get("model", "unknown"),
                "message_length": len(request_data.get("message", ""))
            }
        }
        self.logger.info(json.dumps(log_entry))

九、社区生态与未来发展

9.1 开源社区建设

ExcelAgentTemplate项目的开源特性为其长期发展奠定了坚实基础。项目采用MIT许可证,这意味着:

  1. 商业友好:企业可以自由使用、修改和分发

  2. 社区驱动:鼓励开发者贡献代码和改进

  3. 生态扩展:支持第三方插件和扩展开发

插件生态系统
复制代码
# 插件注册系统
class PluginRegistry:
    def __init__(self):
        self.plugins = {}
    
    def register_plugin(self, name: str, plugin_class: type):
        """注册新插件"""
        self.plugins[name] = plugin_class
    
    def get_plugin(self, name: str):
        """获取插件实例"""
        if name in self.plugins:
            return self.plugins[name]()
        return None
    
    def list_plugins(self) -> List[str]:
        """列出所有可用插件"""
        return list(self.plugins.keys())

# 示例:数据库连接插件
class DatabasePlugin:
    def __init__(self):
        self.name = "database_connector"
        self.description = "连接和查询数据库"
    
    async def execute(self, query: str) -> str:
        # 数据库查询逻辑
        pass

# 插件使用
plugin_registry = PluginRegistry()
plugin_registry.register_plugin("database", DatabasePlugin)

9.2 技术发展趋势

随着AI技术的不断发展,我们可以预见ExcelAgentTemplate将会带来更多创新:

  1. 更智能的Agent:具备更强的推理能力和任务规划能力

  2. 更丰富的工具集:支持更多类型的数据源和操作

  3. 更好的用户体验:更自然的交互方式和更精准的结果

  4. 更广泛的应用:扩展到更多的办公软件和业务场景

结语:AI时代的Excel革命

ExcelAgentTemplate不仅仅是一个技术项目,它代表了一种全新的人机协作模式。在这个项目中,我们看到了几个重要的技术趋势:

技术民主化的典型范例

通过将复杂的AI能力包装成简单的Excel函数,ExcelAgentTemplate实现了技术民主化的目标。它让普通的业务人员也能够轻松使用最先进的AI技术,这种"隐形的复杂性"正是优秀软件设计的标志。

架构设计的启发意义

项目的分层架构设计为我们提供了宝贵的经验:

  • 关注点分离:每一层都有明确的职责边界

  • 技术异构:不同层使用最适合的技术栈

  • 可扩展性:预留了充分的扩展空间

  • 稳定性:通过缓存、重试等机制保证系统稳定性

未来展望

随着AI技术的不断发展,我们可以预见ExcelAgentTemplate将会带来更多创新:

  1. 更智能的Agent:具备更强的推理能力和任务规划能力

  2. 更丰富的工具集:支持更多类型的数据源和操作

  3. 更好的用户体验:更自然的交互方式和更精准的结果

  4. 更广泛的应用:扩展到更多的办公软件和业务场景

对开发者的启示

对于技术从业者来说,ExcelAgentTemplate项目提供了几个重要启示:

  1. 用户体验优先:技术服务于用户需求,而非炫技

  2. 渐进式创新:基于现有基础设施的创新往往更容易被接受

  3. 开放式架构:为未来的扩展预留充分的空间

  4. 社区驱动:开源协作能够带来更强的生命力

在AI浪潮席卷全球的今天,ExcelAgentTemplate为我们展示了一种既务实又前瞻的技术路径。它告诉我们,真正有价值的AI应用不是替代人类,而是增强人类的能力,让每个人都能够站在巨人的肩膀上。

正如项目README中所说:"ExcelAgentTemplate让AI变得像Excel公式一样简单易用。"这句话的背后,蕴含着对技术本质的深刻理解:最好的技术是让人感觉不到技术存在的技术

在这个充满变革的时代,让我们一起期待ExcelAgentTemplate以及类似项目为我们带来更多惊喜,共同见证AI与传统办公软件深度融合的精彩未来。

项目地址ExcelAgentTemplate GitHub Repositoryhttps://github.com/example/ExcelAgentTemplate 社区讨论Discord Serverhttps://discord.gg/yCU6DwTX

更多AIGC文章

相关推荐
qq_5470261797 小时前
LangChain 1.0 核心概念
运维·服务器·langchain
uXrvbWJGleS8 小时前
三相两电平整流器Simulink仿真探究
langchain
猫头虎8 小时前
手动部署开源OpenClaw汉化中文版过程中常见问题排查手册
人工智能·langchain·开源·github·aigc·agi·openclaw
程序员ken8 小时前
深入理解大语言模型(8) 使用 LangChain 开发应用程序之上下文记忆
人工智能·python·语言模型·langchain
一切尽在,你来19 小时前
第二章 预告内容
人工智能·langchain·ai编程
一切尽在,你来1 天前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain
一切尽在,你来1 天前
1.2 LangChain 1.2.7 版本核心特性与升级点
人工智能·langchain
Bruk.Liu1 天前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
JaydenAI1 天前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
OPEN-Source1 天前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek