तीसरे पक्ष के OpenAI संगत API में built in web search उपलब्ध है या नहीं, यह निश्चित नहीं होता। सबसे सामान्य तरीका है: पहले Tavily से इंटरनेट पर खोज करें, फिर खोज परिणाम और TXT डेटा दोनों मॉडल को भेजें। [1][3] Chat Completions अपने आप पिछली बातचीत या पहले भेजे गए डेटा को याद नहीं रखता; इतिहास को प्रोग्राम को स्वयं सह...
शोध उत्तर

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
अगर आपका मॉडल TXT फ़ाइल का विश्लेषण करते समय इंटरनेट से तकनीकी जानकारी भी देखे, तो मौजूदा प्रोग्राम में एक अलग वेब-सर्च चरण जोड़ना सबसे व्यावहारिक समाधान है।
आपके कोड में इस्तेमाल किया गया API तीसरे पक्ष का OpenAI-संगत接口 है। इसलिए यह मान लेना सुरक्षित नहीं है कि deepseek-v4-flash या आपका base_url OpenAI के built-in web-search tool को सीधे समर्थन करता होगा। OpenAI का आधिकारिक वेब सर्च मुख्य रूप से Responses API के माध्यम से उपलब्ध है, जबकि तीसरे पक्ष के संगत接口 में इसकी संगतता अलग-अलग हो सकती है। 5
प्रोग्राम का प्रवाह इस तरह रखें:
[W1], [W2] जैसे स्रोत-आईडी दें।import os
import requests
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY", "")
TAVILY_SEARCH_URL = "https://api.tavily.com/search"
ENABLE_WEB_SEARCH = True
SEARCH_RESULTS_PER_QUERY = 5
SEARCH_DEPTH = "advanced"
Windows PowerShell में API Key इस तरह सेट की जा सकती है:
$env:TAVILY_API_KEY="आपकी Tavily API Key"
def search_tavily(query):
if not TAVILY_API_KEY:
raise ValueError("TAVILY_API_KEY सेट नहीं है।")
headers = {
"Authorization": f"Bearer {TAVILY_API_KEY}",
"Content-Type": "application/json",
}
payload = {
"query": query,
"search_depth": SEARCH_DEPTH,
"max_results": SEARCH_RESULTS_PER_QUERY,
"include_answer": False,
"include_raw_content": False,
"include_images": False,
}
response = requests.post(
TAVILY_SEARCH_URL,
headers=headers,
json=payload,
timeout=60,
)
response.raise_for_status()
data = response.json()
return data.get("results", [])
इसके बाद हर परिणाम को मॉडल के लिए इस रूप में व्यवस्थित करें:
def format_web_context(results):
parts = []
for index, item in enumerate(results, start=1):
parts.append(
f"[W{index}]\n"
f"शीर्षक: {item.get('title', 'बिना शीर्षक')}\n"
f"URL: {item.get('url', '')}\n"
f"सारांश: {item.get('content', '')}\n"
)
return "\n".join(parts)
मॉडल के prompt में स्पष्ट निर्देश दें:
वेब स्रोतों का उपयोग केवल सामान्य तकनीकी व्याख्या के लिए करें।
TXT डेटा से सीधे मिले तथ्यों के लिए वेब citation न लगाएँ।
वेब स्रोत का उपयोग करने पर संबंधित वाक्य के अंत में [W1], [W2] जैसे स्रोत-आईडी लगाएँ।
यदि वेब स्रोत और वर्तमान डेटा में अंतर हो, तो उसे स्पष्ट रूप से लिखें।
यदि प्रमाण पर्याप्त न हो, तो “प्रमाण अपर्याप्त है” लिखें।
मौजूदा कोड में यह पंक्ति दिखाई दे रही है:
content = response.choices.message.content
सामान्य Chat Completions response में choices एक सूची होती है। इसलिए पहले विकल्प को इस तरह पढ़ना चाहिए:
content = response.choices.message.content
साथ ही, खाली response की जाँच बनाए रखें:
if not response.choices:
raise RuntimeError("API response में choices नहीं मिले।")
content = response.choices.message.content
if not content or not content.strip():
raise RuntimeError("मॉडल ने खाली उत्तर दिया।")
return content.strip()
आपके प्रोग्राम में पहले से generate_search_queries() और collect_web_sources() जैसी संरचना मौजूद है। मुख्य विश्लेषण से पहले यह प्रवाह रखें:
search_queries = generate_search_queries(
client=client,
text=txt_text,
memory_text=memory_text,
)
web_sources = collect_web_sources(search_queries)
web_context = format_web_context(web_sources)
फिर प्रत्येक डेटा ब्लॉक का prompt बनाते समय web_context भी जोड़ें:
user_prompt = f"""
नीचे वर्तमान TXT डेटा है:
================ DATA BEGIN ================
{chunk}
================= DATA END =================
नीचे इंटरनेट से मिले संदर्भ स्रोत हैं:
================ WEB BEGIN =================
{web_context}
================= WEB END ==================
वर्तमान डेटा के तथ्य और वेब स्रोतों की सामान्य जानकारी अलग-अलग रखें।
"""
बड़े TXT डेटा के लिए आपका chunk-based तरीका उपयोगी है। हर ब्लॉक का विश्लेषण करने के बाद चरणबद्ध रिपोर्ट सुरक्षित करें और अंत में उन्हें एक अंतिम रिपोर्ट में मिलाएँ। इससे एक ही request बहुत बड़ी होने से बच सकती है।
नहीं—सिर्फ वही client दोबारा इस्तेमाल करने या उसी मॉडल को call करने से पिछली requests अपने-आप याद नहीं रहतीं। Chat Completions में बातचीत का संदर्भ प्रोग्राम को स्वयं सहेजकर अगली request में फिर से भेजना पड़ता है। 2
6
इसलिए तीन अलग-अलग चीज़ों को अलग समझें:
आपका प्रस्तावित analysis_memory.txt तरीका इस काम के लिए पर्याप्त है। इसमें केवल पिछली अंतिम रिपोर्ट सहेजें, पूरा मूल TXT डेटा नहीं।
from pathlib import Path
from datetime import datetime
MEMORY_FILE = Path("analysis_memory.txt")
ENABLE_PERSISTENT_MEMORY = False
MEMORY_INPUT_MAX_CHARS = 12000
MEMORY_FILE_MAX_CHARS = 50000
def load_memory():
if not ENABLE_PERSISTENT_MEMORY:
return ""
if not MEMORY_FILE.exists():
return ""
text = MEMORY_FILE.read_text(encoding="utf-8")
return text[-MEMORY_INPUT_MAX_CHARS:]
def save_memory(final_report, data_filename):
if not ENABLE_PERSISTENT_MEMORY:
return
old_text = ""
if MEMORY_FILE.exists():
old_text = MEMORY_FILE.read_text(encoding="utf-8")
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
record = (
f"\n\n{'=' * 60}\n"
f"समय: {timestamp}\n"
f"डेटा फ़ाइल: {data_filename}\n"
f"{'=' * 60}\n"
f"{final_report}\n"
)
new_text = (old_text + record)[-MEMORY_FILE_MAX_CHARS:]
MEMORY_FILE.write_text(new_text, encoding="utf-8")
फिर मुख्य प्रोग्राम में:
memory_text = load_memory()
# ... डेटा विश्लेषण और अंतिम रिपोर्ट तैयार करें ...
save_memory(final_report, TXT_FILE.name)
अगली बार memory_text को prompt में भेजते समय यह निर्देश अवश्य रखें:
यह पुरानी रिपोर्ट केवल सहायक संदर्भ है।
यह वर्तमान TXT डेटा के तथ्यों को बदल नहीं सकती।
यदि पुरानी रिपोर्ट और वर्तमान डेटा में विरोध हो, तो वर्तमान डेटा को प्राथमिकता दें।
पुरानी रिपोर्ट के आँकड़ों को वर्तमान फ़ाइल के आँकड़े की तरह प्रस्तुत न करें।
यदि हर बार एक ही प्रोजेक्ट या एक ही प्रकार के उपकरण का विश्लेषण हो रहा है, तो स्थानीय मेमोरी उपयोगी हो सकती है। लेकिन अलग-अलग प्रोजेक्ट, wafer, device या प्रयोगों का डेटा विश्लेषित करते समय इसे बंद रखना बेहतर है:
ENABLE_PERSISTENT_MEMORY = False
अन्यथा पुरानी रिपोर्ट नई फ़ाइल की व्याख्या को प्रभावित कर सकती है। मेमोरी चालू करने पर भी केवल उपयोगी सारांश रखें, क्योंकि बहुत लंबी पुरानी रिपोर्ट prompt की जगह और विश्लेषण की स्पष्टता दोनों को प्रभावित कर सकती है।
आपके मामले में सबसे व्यावहारिक संयोजन है:
[W1], [W2] citation;analysis_memory.txt;इस व्यवस्था में मॉडल स्वयं स्थायी रूप से सब कुछ याद नहीं रखेगा। वह केवल वही जानकारी इस्तेमाल करेगा जो आपकी वर्तमान request में भेजी गई है—जिसमें वर्तमान TXT डेटा, ताज़ा वेब परिणाम और आपकी स्थानीय मेमोरी से चुना गया संदर्भ शामिल हो सकता है।
Studio Global AI
इस पृष्ठ में एक स्रोत-समर्थित उत्तर शामिल है जिसे आप Studio Global के अंदर जारी रख सकते हैं।
तीसरे पक्ष के OpenAI संगत API में built in web search उपलब्ध है या नहीं, यह निश्चित नहीं होता।
तीसरे पक्ष के OpenAI संगत API में built in web search उपलब्ध है या नहीं, यह निश्चित नहीं होता। सबसे सामान्य तरीका है: पहले Tavily से इंटरनेट पर खोज करें, फिर खोज परिणाम और TXT डेटा दोनों मॉडल को भेजें। [1][3]
Chat Completions अपने आप पिछली बातचीत या पहले भेजे गए डेटा को याद नहीं रखता; इतिहास को प्रोग्राम को स्वयं सहेजकर दोबारा भेजना पड़ता है। [2][6]