476 lines
20 KiB
Markdown
476 lines
20 KiB
Markdown
# 文心平台集成
|
||
|
||
<cite>
|
||
**本文档引用的文件**
|
||
- [wenxin.py](file://backend/app/workers/platforms/wenxin.py)
|
||
- [base.py](file://backend/app/workers/platforms/base.py)
|
||
- [search_engine.py](file://backend/app/workers/platforms/search_engine.py)
|
||
- [citation_engine.py](file://backend/app/workers/citation_engine.py)
|
||
- [config.py](file://backend/app/config.py)
|
||
- [query.py](file://backend/app/models/query.py)
|
||
- [queries.py](file://backend/app/api/queries.py)
|
||
- [Dockerfile](file://backend/Dockerfile)
|
||
- [kimi.py](file://backend/app/workers/platforms/kimi.py)
|
||
- [tongyi.py](file://backend/app/workers/platforms/tongyi.py)
|
||
- [test_citations.py](file://tests/test_citations.py)
|
||
</cite>
|
||
|
||
## 更新摘要
|
||
**变更内容**
|
||
- 文心平台适配器已简化为搜索引擎模式,移除Playwright浏览器自动化实现
|
||
- 采用统一的搜索引擎查询机制,通过`fetch_search_content`函数获取内容
|
||
- 所有平台适配器(wenxin、kimi、tongyi等)均采用相同的简化模式
|
||
- 移除复杂的页面交互策略和稳定性检测逻辑
|
||
- 保留重试机制和错误处理策略
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心组件](#核心组件)
|
||
4. [架构总览](#架构总览)
|
||
5. [详细组件分析](#详细组件分析)
|
||
6. [依赖关系分析](#依赖关系分析)
|
||
7. [性能考虑](#性能考虑)
|
||
8. [故障排查指南](#故障排查指南)
|
||
9. [结论](#结论)
|
||
10. [附录](#附录)
|
||
|
||
## 简介
|
||
本文件面向"文心平台集成"的技术与非技术读者,系统性说明文心一言平台适配器的实现方式,涵盖以下方面:
|
||
- 文心适配器的职责与实现模式(基于搜索引擎查询)
|
||
- 请求参数构建(关键词处理、搜索引擎查询策略)
|
||
- HTTP请求与搜索引擎交互流程(DuckDuckGo、Wikipedia API)
|
||
- 响应解析与内容提取(HTML解析、文本清理)
|
||
- 配置管理(环境变量、超时与重试策略)
|
||
- 错误处理与异常恢复
|
||
- 安全注意事项与最佳实践
|
||
|
||
## 项目结构
|
||
文心平台集成位于后端工作流模块中,采用"适配器 + 引擎"的分层设计:
|
||
- 适配器层:负责具体平台的搜索引擎查询交互
|
||
- 引擎层:编排多平台查询、品牌匹配与统计
|
||
- 搜索引擎层:提供统一的搜索内容获取能力
|
||
- 配置层:集中管理运行时参数(如API密钥占位、超时设置)
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "适配器层"
|
||
Base["BasePlatformAdapter<br/>抽象接口"]
|
||
Wenxin["WenxinAdapter<br/>文心一言适配器"]
|
||
Kimi["KimiAdapter<br/>Kimi适配器"]
|
||
Tongyi["TongyiAdapter<br/>通义千问适配器"]
|
||
End
|
||
subgraph "搜索引擎层"
|
||
Search["SearchEngine<br/>搜索引擎模块"]
|
||
DDG["DuckDuckGo<br/>HTML搜索"]
|
||
Wiki["Wikipedia API<br/>百科查询"]
|
||
End
|
||
subgraph "引擎层"
|
||
Engine["CitationEngine<br/>引用检测引擎"]
|
||
End
|
||
subgraph "配置层"
|
||
Cfg["Settings<br/>环境配置"]
|
||
Docker["Dockerfile<br/>容器化配置"]
|
||
End
|
||
subgraph "数据模型"
|
||
QModel["Query<br/>查询模型"]
|
||
End
|
||
Base --> Wenxin
|
||
Base --> Kimi
|
||
Base --> Tongyi
|
||
Wenxin --> Search
|
||
Kimi --> Search
|
||
Tongyi --> Search
|
||
Search --> DDG
|
||
Search --> Wiki
|
||
Engine --> Wenxin
|
||
Engine --> QModel
|
||
Wenxin --> Cfg
|
||
Docker --> Wenxin
|
||
```
|
||
|
||
**图表来源**
|
||
- [base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [kimi.py:10-38](file://backend/app/workers/platforms/kimi.py#L10-L38)
|
||
- [tongyi.py:10-38](file://backend/app/workers/platforms/tongyi.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [config.py:9-23](file://backend/app/config.py#L9-L23)
|
||
- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
|
||
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
|
||
|
||
**章节来源**
|
||
- [base.py:1-18](file://backend/app/workers/platforms/base.py#L1-L18)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [config.py:9-23](file://backend/app/config.py#L9-L23)
|
||
- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
|
||
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
|
||
|
||
## 核心组件
|
||
- 文心适配器(WenxinAdapter):实现文心一言平台的搜索引擎查询能力,负责关键词拼接与搜索内容获取
|
||
- 搜索引擎模块(SearchEngine):提供统一的搜索内容获取能力,支持DuckDuckGo和Wikipedia API
|
||
- 引擎(CitationEngine):编排查询任务,调用适配器获取原始响应,进行品牌匹配与竞争品牌检测,并持久化结果
|
||
- 基类(BasePlatformAdapter):定义统一的平台适配器接口,约束平台名称、URL与查询方法
|
||
- 配置(Settings):集中管理数据库、Redis、JWT、Playwright浏览器路径以及API密钥占位等配置项
|
||
- 数据模型(Query):承载查询任务的元数据,包括关键词、目标品牌、平台集合、频率与状态等
|
||
|
||
**章节来源**
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [search_engine.py:16-77](file://backend/app/workers/platforms/search_engine.py#L16-L77)
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
|
||
- [config.py:9-23](file://backend/app/config.py#L9-L23)
|
||
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
|
||
|
||
## 架构总览
|
||
文心平台集成采用"搜索引擎查询 + 引擎编排"的架构:
|
||
- 引擎接收查询请求,按平台顺序调用适配器
|
||
- 适配器通过搜索引擎模块获取与关键词相关的内容
|
||
- 适配器进行重试与错误处理,返回原始文本
|
||
- 引擎进行品牌匹配与统计,写入数据库
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Client as "客户端"
|
||
participant Engine as "CitationEngine"
|
||
participant Adapter as "WenxinAdapter"
|
||
participant Search as "SearchEngine"
|
||
participant DDG as "DuckDuckGo"
|
||
participant Wiki as "Wikipedia API"
|
||
Client->>Engine : "发起查询请求"
|
||
Engine->>Adapter : "query(keyword)"
|
||
Adapter->>Search : "fetch_search_content(keyword)"
|
||
Search->>DDG : "搜索关键词"
|
||
DDG-->>Search : "返回HTML结果"
|
||
Search->>Wiki : "回退到百科查询"
|
||
Wiki-->>Search : "返回百科内容"
|
||
Search-->>Adapter : "返回搜索内容"
|
||
Adapter-->>Engine : "返回原始响应文本"
|
||
Engine-->>Client : "返回引用检测结果"
|
||
```
|
||
|
||
**图表来源**
|
||
- [citation_engine.py:256-287](file://backend/app/workers/citation_engine.py#L256-L287)
|
||
- [wenxin.py:16-33](file://backend/app/workers/platforms/wenxin.py#L16-L33)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
**章节来源**
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
## 详细组件分析
|
||
|
||
### 文心适配器(WenxinAdapter)
|
||
- **角色与职责**
|
||
- 实现BasePlatformAdapter接口,提供文心一言平台的搜索引擎查询能力
|
||
- 使用统一的搜索引擎模块获取与关键词相关的内容
|
||
- 提供重试与指数退避策略,提升查询稳定性
|
||
- 直接返回搜索引擎返回的原始文本内容
|
||
|
||
- **关键实现要点**
|
||
- 简化的查询流程:直接调用搜索引擎模块,无需复杂的页面交互
|
||
- 重试机制:最多3次尝试,指数退避(2^attempt秒)
|
||
- 错误处理:捕获异常并记录日志,最终抛出异常
|
||
- 资源管理:搜索引擎模式无需额外资源清理
|
||
|
||
- **请求参数构建**
|
||
- 关键词处理:直接传递给搜索引擎模块,无需特殊处理
|
||
- 搜索策略:搜索引擎模块会自动处理关键词拼接和查询优化
|
||
- 超时设置:搜索引擎查询超时30秒,确保不会长时间阻塞
|
||
- 重试配置:最多3次尝试,指数退避策略
|
||
|
||
- **响应解析逻辑**
|
||
- 内容获取:直接返回搜索引擎返回的文本内容
|
||
- 文本清理:由搜索引擎模块负责HTML解析和文本清理
|
||
- 错误处理:搜索引擎模块会处理各种异常情况并提供回退机制
|
||
|
||
- **安全与合规**
|
||
- 该实现为搜索引擎查询,不涉及明文API密钥传递
|
||
- 使用公开的搜索引擎API,无需认证
|
||
- 遵循搜索引擎的使用条款和限制
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class BasePlatformAdapter {
|
||
+string platform_name
|
||
+string platform_url
|
||
+query(keyword) str
|
||
+close() void
|
||
}
|
||
class WenxinAdapter {
|
||
+query(keyword) str
|
||
+_do_query(keyword) str
|
||
+close() void
|
||
}
|
||
class SearchEngine {
|
||
+fetch_search_content(platform_name, keyword) str
|
||
+search_duckduckgo(query) str
|
||
+search_wikipedia(keyword) str
|
||
}
|
||
BasePlatformAdapter <|-- WenxinAdapter
|
||
WenxinAdapter --> SearchEngine
|
||
```
|
||
|
||
**图表来源**
|
||
- [base.py:4-18](file://backend/app/workers/platforms/base.py#L4-L18)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
**章节来源**
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
|
||
### 搜索引擎模块(SearchEngine)
|
||
- **角色与职责**
|
||
- 提供统一的搜索内容获取能力
|
||
- 支持DuckDuckGo HTML搜索和Wikipedia API查询
|
||
- 实现智能回退机制,确保查询成功率
|
||
|
||
- **关键实现要点**
|
||
- DuckDuckGo搜索:使用HTML解析获取搜索结果摘要
|
||
- Wikipedia回退:当DuckDuckGo受限时自动切换到Wikipedia API
|
||
- HTML解析:提取标题和摘要信息,去除HTML标签
|
||
- 文本清理:移除引用标记和多余空白字符
|
||
|
||
- **搜索策略**
|
||
- 主要策略:DuckDuckGo HTML搜索,无需API密钥
|
||
- 回退策略:Wikipedia API查询,公开API无需认证
|
||
- 结果合并:将多个搜索结果合并为统一格式
|
||
|
||
- **错误处理**
|
||
- 搜索失败:记录警告并尝试回退策略
|
||
- 解析失败:检查返回内容的有效性
|
||
- 所有策略失败:抛出运行时错误
|
||
|
||
**章节来源**
|
||
- [search_engine.py:16-77](file://backend/app/workers/platforms/search_engine.py#L16-L77)
|
||
- [search_engine.py:79-145](file://backend/app/workers/platforms/search_engine.py#L79-L145)
|
||
- [search_engine.py:147-174](file://backend/app/workers/platforms/search_engine.py#L147-L174)
|
||
|
||
### 引擎(CitationEngine)
|
||
- **角色与职责**
|
||
- 编排查询任务,按平台顺序执行
|
||
- 调用适配器获取原始响应,进行品牌匹配与竞争品牌检测
|
||
- 将结果持久化为引用记录,并更新任务状态与查询时间
|
||
|
||
- **关键实现要点**
|
||
- 平台注册:内置文心、Kimi、通义等适配器,均可扩展更多平台
|
||
- 任务状态管理:运行中、成功、失败三种状态,失败时记录错误信息
|
||
- 结果聚合:返回引用状态、置信度、匹配类型、位置、上下文、竞争品牌与原始响应
|
||
- 关键词增强:为搜索引擎查询自动添加目标品牌关键词
|
||
|
||
- **错误处理**
|
||
- 适配器异常会被捕获并记录,同时生成一条cited=False的占位记录
|
||
- 任务状态与完成时间被正确更新,保证数据一致性
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Start(["开始执行查询"]) --> InitMatcher["初始化品牌匹配器"]
|
||
InitMatcher --> IteratePlatforms["遍历平台列表"]
|
||
IteratePlatforms --> CreateTask["获取或创建任务记录"]
|
||
CreateTask --> UpdateTaskRunning["更新任务状态为 running"]
|
||
UpdateTaskRunning --> EnhanceKeyword["增强关键词添加目标品牌"]
|
||
EnhanceKeyword --> CallAdapter["调用适配器执行查询"]
|
||
CallAdapter --> ParseResult["品牌匹配与竞争品牌检测"]
|
||
ParseResult --> CreateRecord["创建引用记录"]
|
||
CreateRecord --> UpdateTaskSuccess["更新任务状态为 success"]
|
||
UpdateTaskSuccess --> NextPlatform{"还有平台吗?"}
|
||
NextPlatform --> |是| IteratePlatforms
|
||
NextPlatform --> |否| UpdateQueryTime["更新查询时间字段"]
|
||
UpdateQueryTime --> End(["结束"])
|
||
```
|
||
|
||
**图表来源**
|
||
- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
|
||
|
||
**章节来源**
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
|
||
|
||
### 配置管理(Settings)
|
||
- **配置项说明**
|
||
- 数据库连接:DATABASE_URL
|
||
- Redis连接:REDIS_URL
|
||
- JWT密钥与过期:JWT_SECRET、JWT_EXPIRE_HOURS
|
||
- Playwright浏览器路径:PLAYWRIGHT_BROWSERS_PATH(仍保留用于其他适配器)
|
||
- API密钥占位:ZHIPU_API_KEY、TONGYI_API_KEY(当前未用于搜索引擎适配器)
|
||
|
||
- **环境变量加载**
|
||
- 通过Pydantic Settings自动从.env文件加载,忽略未知字段
|
||
|
||
- **容器化与依赖**
|
||
- Dockerfile中安装系统依赖,但Playwright浏览器仅用于其他适配器
|
||
- 确保搜索引擎查询功能正常运行
|
||
|
||
**章节来源**
|
||
- [config.py:9-23](file://backend/app/config.py#L9-L23)
|
||
- [Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
|
||
|
||
### 数据模型(Query)
|
||
- **字段说明**
|
||
- 关键词、目标品牌、别名、平台集合、频率、状态、时间戳等
|
||
- 默认平台集合包含文心与Kimi,便于快速启用
|
||
|
||
- **业务意义**
|
||
- 作为查询任务的载体,驱动引擎执行跨平台检索与分析
|
||
|
||
**章节来源**
|
||
- [query.py:11-55](file://backend/app/models/query.py#L11-L55)
|
||
|
||
### API入口(queries.py)
|
||
- **功能概述**
|
||
- 提供查询任务的增删改查接口,供前端调用
|
||
- 与服务层协作,完成权限校验与数据持久化
|
||
|
||
- **与引擎的关系**
|
||
- 引擎在后台异步执行查询,API负责暴露任务管理能力
|
||
|
||
**章节来源**
|
||
- [queries.py:1-109](file://backend/app/api/queries.py#L1-L109)
|
||
|
||
## 依赖关系分析
|
||
- **组件耦合**
|
||
- CitationEngine依赖各平台适配器,形成平台无关的编排层
|
||
- 所有搜索引擎适配器依赖统一的SearchEngine模块
|
||
- SearchEngine依赖外部服务(DuckDuckGo、Wikipedia)
|
||
- 引擎与模型解耦,通过ORM进行数据持久化
|
||
|
||
- **外部依赖**
|
||
- DuckDuckGo:免费HTML搜索服务
|
||
- Wikipedia API:公开百科查询服务
|
||
- Docker:容器化部署,包含必要的系统依赖
|
||
|
||
```mermaid
|
||
graph LR
|
||
Engine["CitationEngine"] --> Wenxin["WenxinAdapter"]
|
||
Engine --> Kimi["KimiAdapter"]
|
||
Engine --> Tongyi["TongyiAdapter"]
|
||
Wenxin --> Search["SearchEngine"]
|
||
Kimi --> Search
|
||
Tongyi --> Search
|
||
Search --> DDG["DuckDuckGo"]
|
||
Search --> Wiki["Wikipedia API"]
|
||
Engine --> ORM["SQLAlchemy ORM"]
|
||
Engine --> Model["Query模型"]
|
||
```
|
||
|
||
**图表来源**
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [kimi.py:10-38](file://backend/app/workers/platforms/kimi.py#L10-L38)
|
||
- [tongyi.py:10-38](file://backend/app/workers/platforms/tongyi.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
**章节来源**
|
||
- [citation_engine.py:161-176](file://backend/app/workers/citation_engine.py#L161-L176)
|
||
- [wenxin.py:10-38](file://backend/app/workers/platforms/wenxin.py#L10-L38)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
## 性能考虑
|
||
- **查询效率**
|
||
- 搜索引擎查询比浏览器自动化更快,响应时间更短
|
||
- 减少内存和CPU消耗,提高并发处理能力
|
||
- 无需维护浏览器实例,降低资源开销
|
||
|
||
- **稳定性优化**
|
||
- 通过搜索引擎模块的回退机制,提高查询成功率
|
||
- 统一的错误处理和重试策略
|
||
- 外部服务的超时控制,防止长时间阻塞
|
||
|
||
- **重试策略**
|
||
- 最多重试3次,指数退避降低瞬时压力
|
||
- 搜索引擎查询超时30秒,确保及时响应
|
||
|
||
- **缓存与优化**
|
||
- 搜索结果可利用外部服务的缓存机制
|
||
- 减少重复查询,提高整体性能
|
||
|
||
**章节来源**
|
||
- [wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
|
||
## 故障排查指南
|
||
- **搜索引擎查询失败**
|
||
- 现象:DuckDuckGo搜索受限或返回空结果
|
||
- 处理:自动回退到Wikipedia API;检查网络连通性
|
||
- 参考:[search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
|
||
|
||
- **Wikipedia API查询失败**
|
||
- 现象:百科查询不可用或返回空内容
|
||
- 处理:检查Wikipedia API可用性;确认关键词有效性
|
||
- 参考:[search_engine.py:28-76](file://backend/app/workers/platforms/search_engine.py#L28-L76)
|
||
|
||
- **HTML解析失败**
|
||
- 现象:DuckDuckGo返回的HTML结构发生变化
|
||
- 处理:更新HTML解析正则表达式;增加容错分支
|
||
- 参考:[search_engine.py:105-137](file://backend/app/workers/platforms/search_engine.py#L105-L137)
|
||
|
||
- **适配器查询异常**
|
||
- 现象:搜索引擎查询抛出异常
|
||
- 处理:检查重试机制;查看日志定位根因
|
||
- 参考:[wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
|
||
|
||
- **引擎执行失败**
|
||
- 现象:适配器异常导致任务失败
|
||
- 处理:记录错误信息并生成占位记录;检查日志定位根因
|
||
- 参考:[citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
|
||
|
||
- **单元测试验证**
|
||
- 测试覆盖平台返回值与统计数据,确保集成链路正常
|
||
- 参考:[test_citations.py:23-93](file://tests/test_citations.py#L23-L93)
|
||
|
||
**章节来源**
|
||
- [search_engine.py:139-144](file://backend/app/workers/platforms/search_engine.py#L139-L144)
|
||
- [search_engine.py:28-76](file://backend/app/workers/platforms/search_engine.py#L28-L76)
|
||
- [search_engine.py:105-137](file://backend/app/workers/platforms/search_engine.py#L105-L137)
|
||
- [wenxin.py:16-29](file://backend/app/workers/platforms/wenxin.py#L16-L29)
|
||
- [citation_engine.py:231-247](file://backend/app/workers/citation_engine.py#L231-L247)
|
||
- [test_citations.py:23-93](file://tests/test_citations.py#L23-L93)
|
||
|
||
## 结论
|
||
文心平台集成通过"搜索引擎查询 + 引擎编排"的方式,实现了对文心一言的高效查询与内容获取。其特点包括:
|
||
- 简化的适配器实现,移除复杂的浏览器自动化逻辑
|
||
- 统一的搜索引擎查询机制,提高查询成功率和稳定性
|
||
- 完善的重试与回退策略,确保在各种情况下都能获取内容
|
||
- 清晰的错误处理与任务状态管理
|
||
- 与容器化部署的无缝衔接
|
||
|
||
在实际使用中,建议结合业务需求对搜索引擎查询参数进行调优,并持续关注搜索引擎API的变化以保持功能的稳定性。
|
||
|
||
## 附录
|
||
|
||
### API调用示例与错误处理方案
|
||
- **示例场景**
|
||
- 前端通过查询API创建任务,后台引擎按平台顺序执行
|
||
- 引擎调用文心适配器获取搜索内容,进行品牌匹配与统计
|
||
- 若搜索引擎查询异常,引擎记录失败并生成占位记录
|
||
|
||
- **错误处理方案**
|
||
- 搜索引擎查询异常:自动回退到Wikipedia API;记录错误并重试
|
||
- HTML解析失败:更新解析规则并增加容错分支
|
||
- 外部服务不可用:使用缓存内容或回退策略
|
||
|
||
**章节来源**
|
||
- [queries.py:90-109](file://backend/app/api/queries.py#L90-L109)
|
||
- [citation_engine.py:177-254](file://backend/app/workers/citation_engine.py#L177-L254)
|
||
- [wenxin.py:16-33](file://backend/app/workers/platforms/wenxin.py#L16-L33)
|
||
|
||
### 安全注意事项与最佳实践
|
||
- **安全注意事项**
|
||
- 该实现使用公开的搜索引擎API,无需API密钥
|
||
- 遵循搜索引擎的使用条款和限制
|
||
- 日志中避免输出敏感信息(如用户输入、错误堆栈)
|
||
|
||
- **最佳实践**
|
||
- 使用统一的搜索引擎模块,确保查询策略的一致性
|
||
- 设置合理的超时和重试策略,平衡稳定性与性能
|
||
- 监控搜索引擎API的可用性和性能指标
|
||
- 定期更新HTML解析规则以适应搜索引擎页面结构变化
|
||
- 使用单元测试覆盖关键流程,保障回归质量
|
||
|
||
**章节来源**
|
||
- [search_engine.py:163-174](file://backend/app/workers/platforms/search_engine.py#L163-L174)
|
||
- [test_citations.py:23-93](file://tests/test_citations.py#L23-L93) |