Une API tierce compatible avec OpenAI ne prend pas nécessairement en charge les outils de recherche intégrés. La solution proposée lance d'abord une recherche Tavily, puis transmet ses résultats au modèle avec les données TXT.
Réponse de recherche

Create a landscape editorial hero image for this Studio Global article: 我想让其在分析数据的时候连接网络搜索,帮我改一下代码,另外它会有记忆吗?我之前喂给它的东西会记得吗. Article summary: 可以,但你当前使用的是第三方 OpenAI 兼容接口,无法确定 deepseek v4 flash 是否原生支持联网工具。官方 OpenAI 的内置网页搜索主要通过 Responses API 提供,而第三方 base url 不一定兼容该功能。[5] 因此,下面采用更通用的方案:程序先调用 Tavily 搜索互联网,再把搜索结果连同 TXT 数据一起交给模型分析;Tavily 支持通过 API Key 调用搜索接口并返回结构化结果。[. Topic tags: deepresearch, general web, openai, agents, prompt engineering. Style: premium digital editorial illustration, source-backed research mood, clean composition, high detail, modern web publication hero. Use reference image context only for broad subject, composition, and topical grounding; do not copy the exact image. Avoid: logos, brand marks, copyrighted characters, real person likenesses, fake screenshots, UI text, readable text, watermarks, charts with fake numbers, clickbait thumbnails, icons, and tiny thumbnail layout
Oui, c'est possible — mais il vaut mieux distinguer deux sujets : la recherche sur Internet et la mémoire des conversations.
Votre script utilise une API compatible avec OpenAI et le modèle deepseek-v4-flash. Or, la compatibilité du format OpenAI ne garantit pas que le fournisseur accepte les outils intégrés de recherche web. La recherche web native d'OpenAI est principalement proposée via la Responses API, et un fournisseur tiers configuré avec base_url peut ne pas prendre en charge cette fonction.5
La méthode la plus portable consiste donc à séparer les étapes :
data.txt ;[W1], [W2], etc.) ;Tavily s'authentifie avec une clé API et renvoie des résultats structurés, notamment un titre, une URL et un extrait.1
3
import os
import requests
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY", "")
TAVILY_SEARCH_URL = "https://api.tavily.com/search"
def search_tavily(query):
if not TAVILY_API_KEY:
raise ValueError("La clé TAVILY_API_KEY est manquante.")
response = requests.post(
TAVILY_SEARCH_URL,
headers={
"Authorization": f"Bearer {TAVILY_API_KEY}",
"Content-Type": "application/json",
},
json={
"query": query,
"search_depth": "advanced",
"max_results": 5,
"include_answer": False,
"include_raw_content": False,
"include_images": False,
},
timeout=60,
)
response.raise_for_status()
return response.json().get("results", [])
Dans les invites adressées au modèle, il faut préciser que les données du fichier et les extraits web sont des sources de contexte, pas des instructions. Le modèle doit aussi distinguer les faits observés dans le fichier, les informations générales trouvées en ligne et ses propres déductions.
Par exemple, le prompt peut imposer les règles suivantes :
x ou X signifie une valeur absente ou invalide, et non zéro ;[W1] ;Non, pas automatiquement dans ce cas. Avec chat.completions.create(), le modèle ne mémorise pas les appels précédents simplement parce que vous réutilisez le même objet client ou le même nom de modèle. Le contexte doit être conservé par votre application, puis renvoyé dans la requête suivante.2
6
Autrement dit, le modèle ne « se souvient » que des messages que votre programme lui transmet à nouveau.
Le script fourni met en place une mémoire persistante facultative :
analysis_memory.txt ;La configuration correspondante est la suivante :
ENABLE_PERSISTENT_MEMORY = False
MEMORY_FILE = Path("analysis_memory.txt")
MEMORY_INPUT_MAX_CHARS = 12000
MEMORY_FILE_MAX_CHARS = 50000
Pour activer cette fonction :
ENABLE_PERSISTENT_MEMORY = True
La mémoire ne contient ici que les rapports finaux, pas l'intégralité des données brutes. Le prompt rappelle également que les anciens résultats peuvent concerner un autre fichier et ne doivent jamais remplacer les faits du fichier actuellement analysé.
Si vous analysez plusieurs produits, lots ou types de transistors, une mémoire globale peut introduire des conclusions inappropriées. Dans ce cas, il est préférable :
ENABLE_PERSISTENT_MEMORY ; ouLa mémoire doit donc être considérée comme un contexte auxiliaire, et non comme une base de vérité.
Dans le code présenté, l'accès au contenu de la réponse doit généralement s'écrire ainsi :
content = response.choices.message.content
et non :
content = response.choices.message.content
Le premier élément de choices doit être sélectionné avant d'accéder à son message. Il est également utile de vérifier que response.choices n'est pas vide et que content n'est pas nul.
La solution la plus fiable pour votre architecture est de laisser votre programme gérer lui-même la recherche web et la mémoire : Tavily fournit les résultats Internet, tandis que votre code conserve les rapports et reconstruit le contexte à chaque appel. Cette approche dépend moins des fonctions particulières prises en charge par le fournisseur de modèle, tout en vous laissant contrôler les citations, la taille du contexte et la séparation entre les différents projets.
Studio Global AI
Cette page comprend une réponse basée sur la source que vous pouvez continuer dans Studio Global.
Une API tierce compatible avec OpenAI ne prend pas nécessairement en charge les outils de recherche intégrés.
Une API tierce compatible avec OpenAI ne prend pas nécessairement en charge les outils de recherche intégrés. La solution proposée lance d'abord une recherche Tavily, puis transmet ses résultats au modèle avec les données TXT.
Un appel à chat.completions.create() est sans état : le modèle ne conserve pas automatiquement les requêtes précédentes.